Wing wrote:
Hello everyone.
I have a question about using vector.
Given a vector<intwith a lot of integers stored inside, I would like
to delete any elements bigger than some value, say x. Is it any
efficient way to do that?
#include<vector>
#include<iostream>
#include<iterator>
#include<functional>
#include<algorithm>
using namespace std;
int main ()
{
vector<intV;
V.push_back (2);
V.push_back (7);
V.push_back (5);
V.push_back (3);
V.push_back (9);
V.push_back (1);
// Print the vector.
copy (V.begin(), V.end(), ostream_iterator<int>(cout, " "));
cout << endl;
// Invoke remove_if: This method will move all elements that make
// the predicate bind2nd (greater<int>(), 5) true to the front of
// the vector. The return value of this invocation is the first
// element that doesn't belong to the controlled sequence (the
// vector's size is unchanged after the call). These elements are
// deleted by the next call to erase (). Although this looks a bit
// confusing, this feature can be rather handy: This way unneeded
// re-allocations are avoided since the vector's size has
// decreased.
vector<int>::iterator new_end =
remove_if(V.begin(), V.end(),
bind2nd (greater<int>(), 5));
V.erase(new_end, V.end());
// Print the vector again.
copy(V.begin(), V.end(), ostream_iterator<int>(cout, " "));
return 0;
}
Regards,
Stuart