目的:创建一个向量.在它上面使用remove_if
#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
#include<functional>
using namespace std;
int main()
{
int negative_count=0;
vector<int> v = { 2, -1, -3, 5, -5, 0, 7 };
copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
cout << endl;
vector<int>::iterator new_it=remove_if(v.begin(), v.end(), bind2nd(greater<int>(), -1));
v.erase(new_it);
copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
remove_if条件是删除大于-1的数字.为什么显示-5两次?remove_if之后的输出应该是-1 -3 -5 5 0 7.如果我使用的话
V.erase(new_int,v.end())
Run Code Online (Sandbox Code Playgroud)
输出很好:-1 -3 -5
当您调用时std::remove/remove_if
,它会将不满足条件的元素移动到范围的前面.未指定任何剩余元素的值(从返回的迭代器的位置开始).有些人似乎认为它交换元素使得满足条件的元素移动到后面.但是没有指定算法来执行此操作.如果这是您想要的结果,那么您正在寻找的算法是std::partition
.