免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3010 | 回复: 20
打印 上一主题 下一主题

新手:iterator的小问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-26 15:03 |只看该作者 |倒序浏览
有个程序编译不过。。。C++新手,STL新手
  1. #include <list>
  2. #include <set>
  3. #include <algorithm>
  4. using std::list;
  5. using std::set;

  6. typedef struct
  7. {
  8.   int id;
  9.   list<int> l;
  10. }mc;

  11. bool operator == (const mc&o, int id )
  12. {
  13.   return o.id == id;
  14. }

  15. bool operator < (const mc& o, const mc& n)
  16. {
  17.   return o.id < n.id;
  18. }

  19. int main()
  20. {
  21.   mc s;
  22.   set<mc> mcset;

  23.   //init
  24.   for(int i=0;i<5;i++)
  25.   {
  26.      s.id = i;
  27.      mcset.insert( s );
  28.   }

  29.   //想在set中查找符合的,在修改它的list
  30.   //search
  31.   set<mc>::iterator it = find( mcset.begin(), mcset.end(), 3);
  32.   if( mcset.end() == it )   
  33.     return -1;

  34.   //
  35.   it->l.push_back(100);
  36. }
复制代码


刚学习,猜是iterator用错了

[ 本帖最后由 andyY 于 2006-5-26 17:00 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-05-26 15:22 |只看该作者
编译不过,什么编译错误?
现在的人是越来越懒了。

论坛徽章:
0
3 [报告]
发表于 2006-05-26 15:25 |只看该作者
我是回答问题的新手,我也不知道是怎么回事。

论坛徽章:
0
4 [报告]
发表于 2006-05-26 15:32 |只看该作者
呵呵,对不住

stest.cpp: In function 'int main()'
stest.cpp:44: passing 'const std::list<int, std::allocator<int> >' as 'this' argument of 'void std::list<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = int, _Alloc = std::allocator<int>]' discards qualifiers

44行就是
it->l.push_back(100);

论坛徽章:
0
5 [报告]
发表于 2006-05-26 16:30 |只看该作者
改成(*it)->l.push_back(100);试试看

论坛徽章:
0
6 [报告]
发表于 2006-05-26 16:35 |只看该作者
int main
{

晕!

还有就是加
#include <algorithm>

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-05-26 16:40 |只看该作者
原帖由 converse 于 2006-5-26 16:30 发表
改成(*it)->l.push_back(100);试试看

我认为返回的是一个const list,
所以不能修改这个list。
要是想修改的话,先删除这个元素,
然后再insert吧。
这个和以前讨论的一个帖子很类似,
当时是要修改map的实现吧,
可惜找不到那个帖子了。

论坛徽章:
0
8 [报告]
发表于 2006-05-26 16:42 |只看该作者
6楼说的对...代码没有写好

论坛徽章:
0
9 [报告]
发表于 2006-05-26 16:48 |只看该作者
原帖由 lenovo 于 2006-5-26 16:40 发表

我认为返回的是一个const list,
所以不能修改这个list。
要是想修改的话,先删除这个元素,
然后再insert吧。
这个和以前讨论的一个帖子很类似,
当时是要修改map的实现吧,
可惜找不到那个帖子了。



当时没有仔细看楼主的帖子,只是从经验上面反应iter应该是智能指针来用的,我以前也犯过这个错误

论坛徽章:
0
10 [报告]
发表于 2006-05-26 16:55 |只看该作者
我认为返回的是一个const list,
所以不能修改这个list。

我调试以下确实是返回const list
但是不知道原因。
斑竹帮忙找找哪个帖子啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP