求助:::运行结果莫名其妙!!

_highlight 2010-03-13 02:08:42
《c++ primer》9.26,顺序容器删除元素。

//9-26.cpp
//给定定义:int ia[]={0,1,2,3,5,8,13,21,55,89};
//将ia复制到一个vector容器和一个list容器中,
//使用单个迭代器参数版本的erase函数将list容器中的奇数值元素删除掉
//然后将vector容器中的偶数元素删除掉
#include<iostream>
#include<vector>
#include<list>
using namespace std;

int main()
{
int ia[]={0,1,2,3,5,8,12,21,55,89};
vector<int> ivec(ia,ia+11); //将ia复制到vector容器
list<int> ilst(ia,ia+11); //将ia复制到list容器

//删除vector容器中的偶数值元素
for(vector<int>::iterator vit=ivec.begin();
vit!=ivec.end();++vit)
{
if(*vit%2==0) //迭代器所指向的元素为偶数
{
vit=ivec.erase(vit); //删除元素
--vit; //迭代器同退,指向被删除元素的前一元素
}
}

//删除list容器中的奇数值元素
for(list<int>::iterator lit=ilst.begin();
lit!=ilst.end();++lit)
{
if(*lit%2!=0) //迭代器所指向的元素为奇数
{
lit=ilst.erase(lit); //删除元素

--lit; //迭代器同退,指向被删除元素的前一元素
}
}

for(list<int>::iterator it=ilst.begin();it!=ilst.end();++it)
cout<<*it<<endl;

cout<<endl;

for(vector<int>::iterator ti=ivec.begin();ti!=ivec.end();++ti)
cout<<*ti<<endl;
return 0;
}




运行结果如下:
0
2
8
12
4229452

1
3
5
21
55
98
Press any key to continue



这个4229452怎么不知道怎么冒出来的。
我试过把list和vector删除的奇偶换了一下,
结果是4229452始终跟在0 2 8 12后面。
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
某某9 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 rgl8351413 的回复:]
我试过把list和vector删除的奇偶换了一下,
[/Quote]
把奇偶换一下,就会出错!因为第一个元素是偶数。
另外 数组是10个元素.
_highlight 2010-03-13
  • 打赏
  • 举报
回复
ok,谢谢
_highlight 2010-03-13
  • 打赏
  • 举报
回复
上面最后一个结果写错是。是89
stardust20 2010-03-13
  • 打赏
  • 举报
回复
vector<int> ivec(ia,ia+11); //将ia复制到vector容器
list<int> ilst(ia,ia+11); //将ia复制到list容器
数组取下标是从0开始的,所以只要到10就好了。。
昵称很不好取 2010-03-13
  • 打赏
  • 举报
回复
    vector<int> ivec(ia,ia+10);        //11改为10
list<int> ilst(ia,ia+10); //11改为10

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧