ROOT 가이드

한가지 클래스만 담는 TClonesArray

개념

TClonesArray 클래스는 TObjArray를 상속하는 TObject의 배열이다. TObjArray와 다른점은, 여러 클래스를 담을 수 있는 TObjArray와 달리 단 하나의 클래스만 담을 수 있다는 점이다. 이런 점을 이용해서 데이터를 저장할 때 메모리 관리와 시간적인 측면에서 엄청난 효율을 자랑한다.

 

정의

TClonesArray의 생성자는 TClonesArray("[클래스 이름]", 크기) 이며 [클래스 이름]은 배열에 들어가는 클래스의 이름, 크기는 배열의 초기 크기를 의미한다.

TObjArray에서 언급한 것과 같이 배열의 크기는 필요할때 자동으로 늘어난다

TApple 클래스를 다음과 같이 정의하고,

class TApple : public TObject {
    public:
        void  SetSize(Int_t size) { fAppleSize = size; };
        Int_t GetSize()           { return fAppleSize; }
    private:
        Int_t fAppleSize;
};

TApple 클래스를 담는 크기 4의 배열, TClonesArray 를 만들어 보자.

TClonesArray *array = new TClonesArray("TApple",4);

TApple 0
(nullptr)

TApple 1
(nullptr)
TApple 2
(nullptr)
TApple 3
(nullptr)

 

추가

처음 TClonesArray를 만들면 모든 TApple은 nullptr값을 가진다. 가령 n번째 TApple을 생성하고 가져올 때는 ConstructedAt(Int_t i) 함수를 사용한다.

TApple *apple = (TApple *) array -> ConstructedAt(0);

TApple 0
 

TApple 1
(nullptr)
TApple 2
(nullptr)
TApple 3
(nullptr)

이때 ConstructedAt(0)을 불러오면 첫번째 칸에 있는 "TApple 0"을 가져오되 nullptr 값을 가진다면 TApple을 생성한다. TObject를 가져올때는 TObjArray와 마찬가지로 At(Int_t i) 함수를 사용한다.

 

참고자료

댓글

댓글 본문
버전 관리
ejungwoo
현재 버전
선택 버전
graphittie 자세히 보기