C++ primer 习题9.26 的问题。

本文探讨了在删除数组中偶数元素时遇到的迭代器越界问题,并提供了一种解决方案,通过使用continue语句避免了循环中的迭代器递增操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题略。

答案的问题在于 当一开始数组的第一个元素为0时,他为偶数,删除它后,迭代器指向第一个元素1 ,

错误在于下一句,--lit 使得迭代器指向begin的前一个,超出了范围,所以导致运行错误。

必须要了解for语句的实现,则可以解决这个问题。

#include<vector> #include<iostream> #include<list> using namespace std; int main() { int ia[]={0,1,1,2,3,5,8,13,21,55,89}; vector<int>c1(ia,ia+11); list<int>c2(ia,ia+11); vector<int>::iterator pos1; list<int>::iterator pos2; for(pos1=c1.begin();pos1!=c1.end();++pos1) { if((*pos1)%2==0) { pos1=c1.erase(pos1); if(pos1!=c1.begin()) pos1--; else continue; } } for(pos2=c2.begin();pos2!=c2.end();++pos2) { if((*pos2)%2!=0) { pos2=c2.erase(pos2); if(pos2!=c2.begin())--pos2; else continue; } } for(pos1=c1.begin();pos1!=c1.end();++pos1) { cout<<*pos1<<endl; } cout<<"list:"; for(pos2=c2.begin();pos2!=c2.end();++pos2) { cout<<*pos2<<endl; } return 0; }

我用了continue语句,则可以避免循环时要执行的++lit语句。

就此解决了这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值