c++ and vector

W

Wing

Hello everyone.

I have a question about using vector.

Given a vector<int> with 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?

Thanks.
 
C

Carlos Martinez

Wing said:
Hello everyone.

I have a question about using vector.

Given a vector<int> with 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?

try remove_if
 
S

Stuart Redmann

Wing said:
Hello everyone.

I have a question about using vector.

Given a vector<int> with 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<int> V;
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
 
S

Stuart Redmann

Stuart said:
#include<vector>
#include<iostream>
#include<iterator>
#include<functional>
#include<algorithm>

using namespace std;

int main ()
{
vector<int> V;
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

Sorry for the typo:
// decreased.
This should be replaced by
// not decreased.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,431
Messages
2,571,677
Members
48,796
Latest member
Greg L.

Latest Threads

Top