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 应该如何写
...全文
141 点赞 收藏 8
写回复
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);
回复
发动态
发帖子
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
社区公告
暂无公告