Yes, I didn't like the step back. esp since if the first element was deleted, the iterator would step out of vector memory (ie position -1).
Mike, I do like your remove_if example.
i am not familar with this approach, can you please give me an example of defining a some_condition_functor? for example when the value == 5.
vec.erase( std::remove_if( vec.begin(), vec.end(), some_condition_functor ) );or:for( std::vector<T>::iterator it = vec.begin(); it != vec.end() ){if( some_condition ) it = vec.erase(it);else ++it;}the key here is that erase() returns the next valid iterator. "Stepping back" like that isn't correct - after you call erase on that iterator, it's invalidated. The first method above is usually preferred, the second works but is less efficient.FYI I coded this within the email, so there may be something wrong...Mike
From: bringiton bringiton [mailto:kneeride@gmail.com]
Sent: Monday, July 10, 2006 11:56 PM
To: boost-users@lists.boost.org
Subject: [Boost-users] erase and iterators
is this common practise for using an interator with erase? what i wish to do is interate through each item and delete the item if some condition is true. when i delete, i need to move back a step so that i dont miss an item.
for (std::vector<int>::iterator it = vect.begin(); it != vect.end(); it++) {
if ((*it) == 5) { // some condition
vect.erase(it);
it--; // step back
}
}or would it be best to use a reverse iterater? (or possible?)
for (std::vector<int>::reverse_iterator it2 = vect.rbegin(); it2 != vect.rend(); it2++) {
if ((*it) == 5) {
// i'm not actually sure how to erase with a reverse iterator???
vect.erase(it2);
}
}
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users