【发布时间】:2018-05-28 20:06:38
【问题描述】:
#include <iostream>
#include <vector>
#include <algorithm>
#include <time.h>
#include <iomanip>
using namespace std;
bool isEven(int n)
{
return n%2 == 0;
}
int main()
{
srand(time(NULL));
vector<int> myVec;
for(int i = 0; i < 20; i++)
{
myVec.push_back(rand() % 100);
}
while(1)
{
vector<int>::iterator q = std::find_if(myVec.begin(), myVec.end(), isEven);
cout << *q << endl;
if(q == myVec.end())
{
myVec.erase(q);
break;
}
else
myVec.erase(q);
}
return 0;
}
此代码给出分段错误。上面的代码是使用 find_if 和擦除函数从向量中删除所有偶数
请帮忙。任何帮助将不胜感激。
编辑:我已经对其进行了编辑以确保迭代器始终有效。
仍然出现分段错误。
【问题讨论】:
-
不能“它”是 nullptr 吗? *它没有空检查!
-
既然有
remove_if,为什么还要使用find_if? -
您正在擦除第一个
if分支中的结束迭代器q。 -
cmets 和答案的重点是编写循环不是完成这项工作所必需的。如果这项工作听起来像是以前做过数百万次的事情,那么很可能有一种算法可以完成这项工作,并且该算法是
std::remove_if。