LIST表 erase 困扰我1天了 散分100分 求大牛解答

baddy1211 2013-03-29 08:42:38
编译环境为 :CentOS 5.5
编辑器为:gcc/g++

在头文件定义了
typedef std::list<unsigned int> CACHE_LST;
CACHE_LST cache_list_;
然后项目中
cache_list_ 用push_back()增加了一些数字测试

测试删除元素的时候 发现问题
cache_list_.erase(cache_list_.begin()+1);
提示
no match for 'operator+’ in‘xxx::cache_list_.std::list<_Tp, _Alloc>::begin [with _Tp = unsigned int, _Alloc = std::allocator<unsigned int>]() + 1
这个问题是说没有重载+号这个操作符
cache_list_.erase(cache_list_.begin()); 这个是没问题
网上查了资料
erase是可以(x.begin()+1,x.begin()+2); 这样操作的

小弟不才 对list表不是很懂 求大人解答是什么问题?

分数不多 散分100分 求解答

追加:
erase需要iterator参数
于是构建
CACHE_LST::iterator iter =cache_list_.begin();
请问 指定某个区域间的元素 iter 应该如何写
...全文
187 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
雁声留 2013-03-29
  • 打赏
  • 举报
回复
1. 同大家所说,list迭代只支持iter++,++iter,iter--,--iter。不支持+1 -1这样的。 2. 如果“指定某个区域间的元素 iter 应该如何写”,这个没有其他的方式,必须用叠加获取。如取第2个,必须用 while(i <2 && iter != cache_list_.end()) { i++; iter++; }
starytx 2013-03-29
  • 打赏
  • 举报
回复
引用 5 楼 baddy1211 的回复:
谢谢各位大人的回答 问题解决 用了for循环 i++ 当i++等于我指定的数字时 就开始 erase int i=0; for(iter = cache_list_.begin(); iter != cache_list_.end(); ++iter) { ++i; if (i==seq) { waitmic_cache_.erase(iter); ……
这也不狗血,正常思路,不过那个i可以不用的,直接if(*iter == seq) 判断就可以了,*iter就返回的是元素值
majia2011 2013-03-29
  • 打赏
  • 举报
回复
估计,lz是用惯了vector的+吧,list和map的iterator实现都不一样,呵呵呵
baddy1211 2013-03-29
  • 打赏
  • 举报
回复
谢谢各位大人的回答 问题解决 用了for循环 i++ 当i++等于我指定的数字时 就开始 erase int i=0; for(iter = cache_list_.begin(); iter != cache_list_.end(); ++iter) { ++i; if (i==seq) { waitmic_cache_.erase(iter); break; } } 唉 用这个土办法 还竟然解决了这个问题 真心狗血
mujiok2003 2013-03-29
  • 打赏
  • 举报
回复
1L,2L说了原因,解决办法:std::advance

   std::list<int> l(5,8);
   std::list<int>::iterator it = l.begin();
   std::advance(it, 4);
   l.erase(it);
rocktyt 2013-03-29
  • 打赏
  • 举报
回复
引用 楼主 baddy1211 的回复:
本帖最后由 baddy1211 于 2013-03-29 08:49:36 编辑 编译环境为 :CentOS 5.5 编辑器为:gcc/g++ 在头文件定义了 typedef std::list<unsigned int> CACHE_LST; CACHE_LST cache_list_; 然后项目中 cache_lis……
list的迭代器只支持++和--,不支持+多少这种随机访问
一叶之舟 2013-03-29
  • 打赏
  • 举报
回复
引用 1 楼 starytx 的回复:
那就定义迭代器,然后再迭代器上可以自增操作++。 C/C++ code?12345678CACHE_LST cache_list_; cache_list_.push_back(1); cache_list_.push_back(2); cache_list_.push_back(3); cache_list_.push_back(4); ……
档上说的好,迭代器只能++,不能加1.
starytx 2013-03-29
  • 打赏
  • 举报
回复
那就定义迭代器,然后再迭代器上可以自增操作++。
CACHE_LST   cache_list_;

    cache_list_.push_back(1);
    cache_list_.push_back(2);
    cache_list_.push_back(3);
    cache_list_.push_back(4);
    CACHE_LST::iterator it = cache_list_.begin();
    cache_list_.erase(++it);

65,186

社区成员

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

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