运行c++ 显示怎么回事vector iterator decrementable

#include<iostream>#include<vector>#include<list>usingnamespacestd;intmain(){intia[]={... #include<iostream>
#include<vector>
#include<list>
using namespace std;
int main()
{
int ia[]={0,1,1,2,3,5,8,13,21,55,89};
vector<int>ivec(ia,ia+11);
list<int>ilst(ia,ia+11);
//删除list中的技术元素
for(list<int>::iterator lit=ilst.begin();lit!=ilst.end();++lit){
if(*lit%2!=0){
lit=ilst.erase(lit);
--lit;
}
}
for(vector<int>::iterator vit=ivec.begin();vit!=ivec.end();++vit){
if(*vit%2==0){
vit=ivec.erase(vit);
--vit;
}
}
system("pause");
return 0;
}这是程序代码
展开
 我来答
y897993276
2012-08-24
知道答主
回答量:3
采纳率:0%
帮助的人:3万
展开全部
需要看给list或者vector初始化的元素序列的第一个元素是奇数还是偶数,比如像你ia这个数组这样第一个元素是偶数,那么必须单独删除这个偶数,不能使用--vit这个操作。
修改如下
if(*viter%2 == 0 && viter == ivec.begin())
{
viter = ivec.erase(viter);
}
else if(*viter%2 == 0)
{
viter = ivec.erase(viter);
--viter;
}
第一个元素师奇数也是一样的
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rm_2013
2012-07-19 · TA获得超过459个赞
知道小有建树答主
回答量:281
采纳率:100%
帮助的人:166万
展开全部
vector的迭代器,已经指向了vector第一个元素了,你还让它--,超出范围了

使用迭代器要很谨慎的保证它是有效的,并且不越界
这个是VC在STL中增加了检查机制
否则,你的程序将静悄悄的崩溃掉
追问
怎么修改啊?谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e4ac482
2015-11-05 · 超过18用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:33.2万
展开全部
看看数组下标是不是越界
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式