LIST表 erase 困扰我1天了 散分100分 求大牛解答
本帖最后由 baddy1211 于 2013-03-29 08:49:36 编辑 编译环境为 :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 应该如何写
[解决办法]
那就定义迭代器,然后再迭代器上可以自增操作++。
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);
[解决办法]
档上说的好,迭代器只能++,不能加1.
[解决办法]
list的迭代器只支持++和--,不支持+多少这种随机访问
[解决办法]
1L,2L说了原因,解决办法:std::advance
std::list<int> l(5,8);
std::list<int>::iterator it = l.begin();
std::advance(it, 4);
l.erase(it);