迭代器运算报错

JPF1024 2014-05-18 02:28:44
不知道为什么只要有it+=2;就报错,求解答,谢谢。


#include<iostream>
#include<list>
#include<iterator>
#include<forward_list>
using namespace std;


int main()
{
list<int> lis={0,1,2,3,4,5,6,7};
forward_list<int> flt = {11,22,33,44,55,66,77,88,99,0};
for(list<int>::iterator it=lis.begin();it!=lis.end();++it)
{
if(*it%2)
{
it=lis.insert(it,*it);//复制当前元素.
//报错it+=2;
}else
{
it=lis.erase(it);
}
}

for(forward_list<int>::iterator its=flt.begin();its!=flt.end();++its)
{
if(*its%2)
{
its = flt.insert_after(its,*its);
//报错its+=2;
}else
{
its = flt.erase_after(its);
}

}

return 0;
}



...全文
115 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JPF1024 2014-05-18
  • 打赏
  • 举报
回复
引用 4 楼 u014682413 的回复:
修改如下: #include<iostream> #include<list> #include<iterator> #include<forward_list> using namespace std; int main() { list<int> lis={0,1,2,3,4,5,6,7}; forward_list<int> flt = {11,22,33,44,55,66,77,88,99,0}; for(list<int>::iterator it=lis.begin();it!=lis.end();)//删除++it { if(*it%2) { it=lis.insert(it,*it);//复制当前元素. advance (it, 2); }else { it=lis.erase(it); } } for(forward_list<int>::iterator its=flt.begin();its!=flt.end();) { if(*its%2) { its = flt.insert_after(its,*its); advance (it, 2); }else { its = flt.erase_after(its); } } return 0; }
谢谢,一点小错误疏忽了...
JPF1024 2014-05-18
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
(forward_)list::iterator 不是随机访问迭代器,不支持 += 操作。
谢谢提醒
JPF1024 2014-05-18
  • 打赏
  • 举报
回复
引用 2 楼 taodm 的回复:
楼主,看书要认真
疏忽了,谢谢下次认真
知行year 2014-05-18
  • 打赏
  • 举报
回复
修改如下: #include<iostream> #include<list> #include<iterator> #include<forward_list> using namespace std; int main() { list<int> lis={0,1,2,3,4,5,6,7}; forward_list<int> flt = {11,22,33,44,55,66,77,88,99,0}; for(list<int>::iterator it=lis.begin();it!=lis.end();)//删除++it { if(*it%2) { it=lis.insert(it,*it);//复制当前元素. advance (it, 2); }else { it=lis.erase(it); } } for(forward_list<int>::iterator its=flt.begin();its!=flt.end();) { if(*its%2) { its = flt.insert_after(its,*its); advance (it, 2); }else { its = flt.erase_after(its); } } return 0; }
知行year 2014-05-18
  • 打赏
  • 举报
回复
//报错it+=2; 是因为迭代器没有定义+=运算符, 可以用advance (it, 2);实现类似的操作。
taodm 2014-05-18
  • 打赏
  • 举报
回复
楼主,看书要认真
ri_aje 2014-05-18
  • 打赏
  • 举报
回复
(forward_)list::iterator 不是随机访问迭代器,不支持 += 操作。

64,688

社区成员

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

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