Re: Declaring iterators
On Apr 29, 2:03 am, "Jim Langston" <tazmas...@rocketmail.com> wrote:
"desktop" <f...@sss.com> wrote in message
news:f103e7$1n2$1@news.net.uni-c.dk...
I am not sure I quite understand the use of iterators. I have this int
array:
int a[] = {1,2,3,4,5}
I would now like to make an iterator to the first and last element:
std::iterator<int> iter;
iter = a;
but this does not compile.
If I instead choose to make an iterator on a vector it works:
#include <vector>
std::vector<int> vecIter;
why is it not possible to make an iterator to an int array (besides from
the obvious: int* iter = a)
From what Erik says, I gather that int* iter = a; IS an iterator. I.E.=
You
should be able to pass iter to the standard templates that require an
iterator.
That's certainly true.
In this case, the key is to realize that iterator isn't a type,
but a concept. A type (any type) can be used as an iterator if
it meets the constraits. Both std::vector<int>::iterator and
int* meet the constraints of an iterator, so both can be used
anywhere an iterator is required. Neither int nor
std::vector<int> meet the constraints, so neither can be used
when an iterator is required. (There is a wierd special case in
the case of things like:
std::vector< int > v( 10, 42 ) ;
Formally, function overload resolution results in this calling
the two iterator form of the constructor, with the iterator type
instantiated with int. The standard requires the implementation
to cause the instantiation to behave as if the programmer had
written:
std::vector< int > v( static_cast< size_t >( 10 ), 42 ) ;
however. The iterator argument is not considered an iterator.)
--
James Kanze (Gabi Software) email: james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34