У Виктора есть возможность сделать что-то с элементом перед удалением. (Я не смог сделать это с remove_if
или remove_copy_if
.) Но я предпочитаю использовать std::find_if
, поэтому мне никогда не придется увеличивать итератор самостоятельно:
typedef vector<int> int_vector;
int_vector v;
int_vector::iterator itr = v.begin();
for(;;)
{
itr = std::find_if(itr, v.end(), Predicate(4));
if (itr == v.end())
{
break;
}
// do stuff with *itr here
itr = v.erase(itr); // grab a new, valid iterator
}
Где предикат может быть bind1st( equal_to<int>(), 4 )
или что-то вроде этого:
struct Predicate : public unary_function<int, bool>
{
int mExpected;
Predicate(int desired) : mExpected(desired) {}
bool operator() (int input)
{
return ( input == mExpected );
}
};