真心很急啊求大神C++ 中 vector 的erase 调用方法的问题 为什么会出现一个异常
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector <int> v1;
vector<int>::iterator iter;
for(int i=0;i<=100;i++)
{
v1.push_back(i);
}
iter=v1.begin();
while(1)
{
if(iter+4>v1.end())
break;
else
iter=v1.erase(iter+1,iter+4);
}
system("pause");
return 0;
}
[解决办法]
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector <int> v1;
vector<int>::iterator iter;
for(int i=0;i<=100;i++)
{
v1.push_back(i);
}
iter=v1.begin();
vector<int>::iterator itend;
bool bEnd = false;
while(1)
{
//判断vector剩余元素还够不够被删除,你要删除的长度是3,还得保存1个,所以检查长度应该是4个
vector<int>::iterator it = iter;
itend = v1.end(); //erase会导致迭代器失效,所以需要重新获取end()
for (int n = 0;n<4;n++)
{
if (it == itend)//如果剩余的元素不够,bEnd为ture
{
bEnd = true;
break;
}
it++;
}//end for
if (bEnd)
break;
else
iter=v1.erase(iter+1,iter+4);
}
system("pause");
return 0;
}