Re: nested iterators

From: Fons Rademakers (Fons.Rademakers@cern.ch)
Date: Thu Mar 11 1999 - 17:12:04 MET


The current way is the only portable way (since container independent). 
However, creating a TIter (on the stack) causes the
allocation/deallocation
of a container specific iterator on the stack (via new/delete). If the
innerloop
is called millions of times you can better try container specific
alternatives.
For example:

   leafList = branch->GetListOfLeaves();
   int entries = leafList->GetEntriesFast();
   for (int i = 0; i < entries; i++) {
      leaf = (TLeaf*) leafList->UncheckedAt(i);
      // stuff
   }

Cheers, Fons.




Sean Kelly wrote:
> 
> Hi Rooters
> 
> My question is with regards to the correct way to implement nested
> iterators.
> 
> In the code fragment below, it seems that inner loop iterator is
> created many times, when all I really want to do is to reset it to
> the new value of leafList.
> 
> Thanks for any advice.
> 
> Sean Kelly
> 
>   TObjArray *branchList = ntuple->TTree::GetListOfBranches();
>   TObjArray *leafList;
> 
>   TIter nextBranch(branchList);
>   while ( branch = (TBranch*) nextBranch() ) {
>     leafList = branch->GetListOfLeaves();
>     TIter nextLeaf(leafList);
>     while ( leaf = (TLeaf*) nextLeaf() ) {
> 
>         // stuff
> 
>     }
>   }

-- 
Org:    CERN, European Laboratory for Particle Physics.
Mail:   1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
WWW:    http://root.cern.ch/~rdm/            Fax:   +41 22 7677910



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:30 MET