memo/root/TClonesArray をテンプレートにして作成
ページ一覧
編集メニュー >
新規作成
編集
コピー
名前の変更
アップロード
添付ファイル一覧
バックアップ
開始行:
* TClonesArray [#e984a6c5]
** RemoveAllの挙動? [#xa1e0ab1]
void chkTClonesArray(){
TClonesArray *array = new TClonesArray("TNamed",10);
array->SetName("array");
//----------------------------------------
for (Int_t i=0;i<3;++i){
Int_t nobj = array->GetEntries();
new ((*array)[nobj]) TNamed();
TNamed *obj = (TNamed*)array->At(nobj);
obj->SetName(Form("obj_%d",i));
}
for (Int_t i=0;i<3;++i){
TNamed *obj = (TNamed*)array->At(i);
cout<<i<<" "<<obj->GetName()<<endl;
}
TNamed *obj = (TNamed*)array->At(1);
// (1)
array->Delete();
// (2)
// array->RemoveAt(1);
// array->Compress();
// (3)
// array->RemoveAll();
// array->Compress();
cout<<obj->GetName()<<endl;
cout<<obj->GetTitle()<<endl;
array->Delete();
cout<<endl<<"array is deleted"<<endl<<endl;
cout<<obj->GetName()<<endl;
//----------------------------------------
}
このマクロで(1)−(3)の部分を変えると挙動が違う。
(1)と(2)は
aproot [0] .x macros/chkTClonesArray/chkTClonesArray.cc
0 obj_0
1 obj_1
2 obj_2
TObject
Basic ROOT object
array is deleted
TObject
となり、オブジェクトが初期化されている。一方(3)で走ら...
aproot [0] .x macros/chkTClonesArray/chkTClonesArray.cc
0 obj_0
1 obj_1
2 obj_2
obj_1
array is deleted
obj_1
となり、オブジェクトはdelete(初期化というべき?)されて...
** Removeの使い方 [#nc1b7c8a]
以下のように使う。
for (int i=0;i<Array->GetEntriesFast();++i){
Txx *obj = (Txx*)Array->At(i);
if (条件){
Array->RemoveAt(i);
}
}
Array->Compress();
以下のように書くとどうもダメみたい。
***ダメ例2 [#n631a50a]
for (int i=0;i<Array->GetEntries();++i){
Txx *obj = (Txx*)Array->At(i);
if (条件){
Array->RemoveAt(i);
}
}
Array->Compress();
***ダメ例1(ダメじゃないかも?) [#gfae53f2]
for (int i=0;i<Array->GetEntries();++i){
Txx *obj = (Txx*)Array->At(i);
if (条件){
Array->RemoveAt(i);
Array->Compress();
--i;
}
}
終了行:
* TClonesArray [#e984a6c5]
** RemoveAllの挙動? [#xa1e0ab1]
void chkTClonesArray(){
TClonesArray *array = new TClonesArray("TNamed",10);
array->SetName("array");
//----------------------------------------
for (Int_t i=0;i<3;++i){
Int_t nobj = array->GetEntries();
new ((*array)[nobj]) TNamed();
TNamed *obj = (TNamed*)array->At(nobj);
obj->SetName(Form("obj_%d",i));
}
for (Int_t i=0;i<3;++i){
TNamed *obj = (TNamed*)array->At(i);
cout<<i<<" "<<obj->GetName()<<endl;
}
TNamed *obj = (TNamed*)array->At(1);
// (1)
array->Delete();
// (2)
// array->RemoveAt(1);
// array->Compress();
// (3)
// array->RemoveAll();
// array->Compress();
cout<<obj->GetName()<<endl;
cout<<obj->GetTitle()<<endl;
array->Delete();
cout<<endl<<"array is deleted"<<endl<<endl;
cout<<obj->GetName()<<endl;
//----------------------------------------
}
このマクロで(1)−(3)の部分を変えると挙動が違う。
(1)と(2)は
aproot [0] .x macros/chkTClonesArray/chkTClonesArray.cc
0 obj_0
1 obj_1
2 obj_2
TObject
Basic ROOT object
array is deleted
TObject
となり、オブジェクトが初期化されている。一方(3)で走ら...
aproot [0] .x macros/chkTClonesArray/chkTClonesArray.cc
0 obj_0
1 obj_1
2 obj_2
obj_1
array is deleted
obj_1
となり、オブジェクトはdelete(初期化というべき?)されて...
** Removeの使い方 [#nc1b7c8a]
以下のように使う。
for (int i=0;i<Array->GetEntriesFast();++i){
Txx *obj = (Txx*)Array->At(i);
if (条件){
Array->RemoveAt(i);
}
}
Array->Compress();
以下のように書くとどうもダメみたい。
***ダメ例2 [#n631a50a]
for (int i=0;i<Array->GetEntries();++i){
Txx *obj = (Txx*)Array->At(i);
if (条件){
Array->RemoveAt(i);
}
}
Array->Compress();
***ダメ例1(ダメじゃないかも?) [#gfae53f2]
for (int i=0;i<Array->GetEntries();++i){
Txx *obj = (Txx*)Array->At(i);
if (条件){
Array->RemoveAt(i);
Array->Compress();
--i;
}
}
ページ名:
and
or
Menu
kondowiki
memo
exp
link
#lsx
Counter: 0, today: 0, yesterday: 0