hi !

There are 2 broad classifications of stl containers:
1. Sequence
2. Associative

And I believe that iterators invalidate in sequence containers, and not 
in associative.

I also believe that associative container are managed internally as 
graphs / tree, as per the type of properties they exhibit.
And thanks for the link you have provided; informative one :)







Indika Bandara Udagedara wrote:
> thanks for pointing me in correct direction
>
> googling for iterator invalidate got me into this.
> it says in maps(fortunately for my case) doesn't invalidate iterators
> upon erase/insert.
>
> http://www.sgi.com/tech/stl/Map.html
>
> --- In [email protected], Knowledge Seeker
> <[EMAIL PROTECTED]> wrote:
>   
>> Hi !
>>
>> And oh I forgot in the last mail.
>> The iterator is 'valid' if the contents of the container doesn't
>>     
> change, 
>   
>> means there is no deletion, or addition in the container.
>>
>> If there is addition / deletion the iterator gets invalidated.
>>
>>
>>
>> Indika Bandara Udagedara wrote:
>>     
>>> Hi,
>>> can you explain the life cycle of an iterator ?
>>>
>>> pls consider following example.
>>>
>>> typedef map<int, int> mapii;
>>> typedef map<int, int>::iterator itii;
>>>
>>> mapii m;
>>> pair<itii, bool> p = m.insert(make_pair(1, 2));
>>> itii it = p.first;
>>>
>>> // do all sorts of insert/erase to map
>>> // but dont remove pair(1,2)
>>> m.insert(0, 1);
>>> m.insert(2, 3);
>>> m.insert(3, 4);
>>> // so the map would be
>>> // 0,1
>>> // 1,2 <-- we are looking at here
>>> // 2,3
>>> // 3,4
>>>
>>> // do some erases
>>> m.erase(2);
>>> m.erase(0);
>>> // so the map would be
>>> // 1,2 <-- we are looking at here
>>> // 3,4
>>>
>>> // do some inserts
>>> m.insert(-1, 0);
>>> m.insert(0, 1);
>>> m.insert(5, 6);
>>> // so the map would be
>>> // -1,0
>>> // 0,1
>>> // 1,2 <-- we are looking at here
>>> // 3,4
>>> // 5,6
>>>
>>> // now we are going to remove 'it' which we kept safely
>>> m.erase(it);
>>> // so the map would be
>>> // -1,0
>>> // 0,1
>>> // 3,4
>>> // 5,6
>>>
>>> this works as expected. but can this be guarenteed.
>>> eg. if i do all sorts of manipulations for the map without touching
>>> the iterator would it last ?
>>>
>>> one more thing. the iterator is a local variable. map returns an
>>> iterator on insert (not a reference to an iterator). so is what i'm
>>> doing correct? can the iterator be treated like a pointer. i tried
>>> with moving the local iterator around functions eg. returning
>>> iterator. it works like a pointer as i understood.
>>>
>>> thanks.
>>>
>>>
>>>       
>
>
>
>   

Reply via email to