C++ primer 习题练习:9.26

#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); //删除ilst奇数元素 for (list<int>::iterator lit=ilst.begin();lit!=ilst.end();++lit) { if (*lit%2==1) { lit=ilst.erase(lit); if(lit==ilst.begin())//处理指向头的问题 continue; --lit; //迭代器回退,指向前一个元素 } } for (list<int>::iterator lit=ilst.begin();lit!=ilst.end();++lit) { cout<<*lit<<endl; } //删除vector容器中的偶元素 for (vector<int>::iterator vit=ivec.begin();vit!=ivec.end();++vit) { if (*vit%2==0) { vit=ivec.erase(vit); if(vit==ivec.begin())//处理指向头的问题 continue; --vit; } } for (vector<int>::iterator vit=ivec.begin();vit!=ivec.end();++vit) { cout<<*vit<<endl; } return 0; }

答案书上的哪个例子是错的,自己改了一下,回去一想,还是错的,重新又写了一个版本,下面的没有问题:

#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<int>::iterator lit = ilst.begin(); while(lit != ilst.end()) { if(*lit%2==1){ lit=ilst.erase(lit); } else { ++lit; } } for (list<int>::iterator lit = ilst.begin(); lit != ilst.end(); ++lit) { cout << *lit <<" "; } cout<<endl; vector<int>::iterator vit = ivec.begin(); while(vit != ivec.end()) { if(*vit%2==0){ vit=ivec.erase(vit); } else { ++vit; } } for (vector<int>::iterator vit = ivec.begin(); vit != ivec.end(); ++vit) { cout << *vit << " "; } cout<<endl; return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值