C_XianRen 2016-08-07 02:17 采纳率: 57.1%
浏览 1183
已采纳

新人c++中 有关list 和forward_list的一点问题,还望指点。

c++primer中文版的316页的 一个改变容器的循环程序
vector vi ={0,1,2,3,4,5,6,7,8,9};
auto iter=vi.begin();
while(iter!=vi.end()){
if(*iter!%2){
iter=vi.insert(iter.*iter);
iter+=2;
}
else
iter=vi.erase(iter);
}
这个程序不能用在forward_list中我知道是因为单向链表没用很好的获得前驱的方法,
只能作用于后一元素,但是list为什么也不行?
先谢谢了。

  • 写回答

2条回答 默认 最新

  • 尚书左仆射 2016-08-07 05:57
    关注
    主要是因为这句话:iter+=2;
    这要求容器的迭代器为随机迭代器。
    list虽然是双向循环链表,但是其迭代器为双向迭代器,不能满足要求。即不能有iter+=2;操作。
    它只能做两次的++iter操作。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。