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. > > > > >
