H
HungryGoat
Hi, I found this code in "The C++ Standard Library" book by Nikolai.
template <class Cont>
inline bool replace_key (Cont& c,
const typename Cont::key_type& old_key,
const typename Cont::key_type& new_key)
{
typename Cont::iterator pos;
pos = c.find(old_key);
if (pos != c.end()) {
//insert new element with value of old element
c.insert(typename Cont::value_type(new_key,
pos->second));
//remove old element
c.erase(pos);
return true;
}
else {
//key not found
return false;
}
}
My question is, in the call to c.erase(pos), aren't there chances that pos is invalidated by the previous call to insert?
I am under the impression that insert or delete invalidates the iterators.
Cheers!
template <class Cont>
inline bool replace_key (Cont& c,
const typename Cont::key_type& old_key,
const typename Cont::key_type& new_key)
{
typename Cont::iterator pos;
pos = c.find(old_key);
if (pos != c.end()) {
//insert new element with value of old element
c.insert(typename Cont::value_type(new_key,
pos->second));
//remove old element
c.erase(pos);
return true;
}
else {
//key not found
return false;
}
}
My question is, in the call to c.erase(pos), aren't there chances that pos is invalidated by the previous call to insert?
I am under the impression that insert or delete invalidates the iterators.
Cheers!