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