运行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;
}这是程序代码 展开
#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;
}这是程序代码 展开
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;
}
第一个元素师奇数也是一样的
修改如下
if(*viter%2 == 0 && viter == ivec.begin())
{
viter = ivec.erase(viter);
}
else if(*viter%2 == 0)
{
viter = ivec.erase(viter);
--viter;
}
第一个元素师奇数也是一样的
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
vector的迭代器,已经指向了vector第一个元素了,你还让它--,超出范围了
使用迭代器要很谨慎的保证它是有效的,并且不越界
这个是VC在STL中增加了检查机制
否则,你的程序将静悄悄的崩溃掉
使用迭代器要很谨慎的保证它是有效的,并且不越界
这个是VC在STL中增加了检查机制
否则,你的程序将静悄悄的崩溃掉
追问
怎么修改啊?谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看数组下标是不是越界
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询