首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

真心很急求大神C++ 中 vector 的erase 调用方法的有关问题 为什么会出现一个错误

2013-11-30 
真心很急啊求大神C++ 中vector 的erase 调用方法的问题 为什么会出现一个异常#include vector #include

真心很急啊求大神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;
}
真心很急求大神C++ 中  vector 的erase 调用方法的有关问题 为什么会出现一个错误真心很急求大神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();
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;
}


供参考
[解决办法]
引用:
Quote: 引用:

这句话有问题:iter+4>v1.end() 你知道v1.end()+1是什么吗?iter+4超过了end()那根本就无法比较啊!
改成iter>v1.end()-4,也可以参考这种:
for(iter=v1.begin();iter<v1.end()-4;iter++)
{
iter=v1.erase(iter+1,iter+4);//返回的是最后一个元素的下一个
--iter;//迭代器滚回
}

这个问题我理解了但是还是会发生我截图的那个中断啊 
 iter=v1.erase(iter+1,iter+4);
 而且我是一步一步的调试的,循环的第一次到这句话的就会发生中断,但是我觉得这句话也应该没有错了啊

你的新代码呢?贴出来看看。
[解决办法]
把iter=v1.erase(iter+1,iter+4);
改成
v1.erase(iter+1,iter+4);
iter++;
就OK了,
应该是返回值不能和erase的参数是同一个。

热点排行