Re: Dereferencing (pointer to) iterator
<xgngli@gmail.com> wrote in message
news:1182565809.415233.272070@k79g2000hse.googlegroups.com...
On Jun 22, 6:04 pm, Andre Kostur <nntps...@kostur.net> wrote:
"xgn...@gmail.com" <xgn...@gmail.com> wrote
innews:1182549317.833678.206870@z28g2000prd.googlegroups.com:
Suppose we have a vector:
vector<int> vec(10);
We can declare a iterator this way:
vector<int>::iterator vecItor;
and then dereference it like this:
for (vecItor = vec.begin(); vecItor != vec.end(); vecItor++)
{
cout << *vecItor << endl;
}
But how can we dereference the iterator if we declare it this way:
vector<int>::iterator* vecItor;
**vecItor.
That's a pointer-to-iterator. So you need to dereference your pointer
part, then dereference the iterator.
Thanks guys. That makes perfect sense. However, when I run this in
Visual Studio,
vector<int> vec(10);
vector<int>::iterator* vecItor = new vector<int>::iterator();
You declared a pointer to an iterator, yet you haven't pointed it to
anything yet. It's pointing to random memory since it's uninitialized. I
do not know if:
vecItor = new( std:vector<int>::iterator );
is legal or not. It may be, I just don't know (have never tried to new a
template before).
for (*vecItor = vec.begin(); *vecItor != vec.end(); vecItor++)
You are using some memory, which your program probably doesn't own, as an
interator. Also, you are incrementing the pointer with vecItor++, did you
mean *vecItor++ (that is, once you actually have it pointing to some memory
set aside as an interator).
{
cout << **vecItor << endl;
}
it caused debug assertion failure: vector iterators incompatible.
So I suspect there is no problem with the grammar. I just need to
search somewhere else to
find a way making VS happy.