【发布时间】:2019-01-07 09:51:47
【问题描述】:
我正在尝试使用remove_if 删除矢量元素。但没有成功。我究竟做错了什么?
这是我的代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
void printme(std::vector<int>& a){
for(const auto& item: a)
std::cout << item << std::endl;
}
int main()
{
std::vector<int> a {1, 2, 3, 4, 5, 6};
printme(a);
a.erase( (std::remove_if(a.begin(), a.end(), [](const int& x){
return x == 2;
}), a.end()));
printme(a);
}
我的输出只是:
1 2 3 4 5 6
预期输出:
1 2 3 4 5 6 1 3 4 5 6
【问题讨论】:
-
您没有收到运行时错误吗?您的代码超出了界限,因为 vector::end() 点超出了向量的末尾。
-
@Headcrab,当我在 cpp.sh 上运行它时,没有任何运行时错误的迹象,但是当我稍后在 Visual Studio 中尝试时,一个获取运行时错误指出了问题所在
-
为什么是 remove_if?只要你要擦除,std::find 在效率方面要好得多。