Re: iterator and index
Mirek Fidler wrote:
James Kanze wrote:
Mirek Fidler wrote:
G wrote:
for(size_t i=0;i!=vi.size();++i) //for(vector<int>::iterator
iter=vi.begin();iter!=vi.end();++i)
cout<<vi[i]<<endl; // cout<<*iter<<endl;
}
vector<int>::iterator x=vi.end();
for(vector<int>::iterator iter=vi.begin(); iter!=x;
++i)
will it take less time?
No, most likely not, but the same thing with vi.size() will.
It depends.
A good optimizer will almost certainly rewrite the loop to use a
stepped index, incrementing in fact sizeof(T) each time through
the loop, and comparing with (end - begin). Depending on the
contents of the loop, the compiler might even be able to figure
out that end and begin don't change, and generate exactly the
same code for both loops.
Definitely.
All I wanted to point out that there are two mutually exclusive optimal
vector implementations: One favors fast end(), other favors fast
size(). Obviously, one that favors fast end() is used in all STL
implementations.
There are more than two. An implementation could maintain both
the size and the end pointer, optimizing both end() and size()
(but pessimizing push_back, since it would then have to update
two variables).
In fact, I think that all implementations derive ultimately from
the same original code base. That code base implemented size
using "end - begin" (which requires a division by sizeof(T),
given the way pointer arithmetic works), and so do all I know of
today.
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]