关于list的iterator如何加减

peng6sl 2010-03-08 01:30:40
小弟初学STL中的list,有许多都不太明白,关于iterator我所知道似乎是一个指向list的指针,我想让这个iterator可以跳跃的加减,而不是只能 iterator++,iterator--的用,我也试过iterator+2但是都不行,只能一个一个来,
还请指点指点哈
...全文
899 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlm_87 2010-03-08
  • 打赏
  • 举报
回复
list是链式存储,内存不是连续的,所以不能随机存取。iterator就不能做加法运算了。不过对于vector来说,iterator是能够执行加法的。程序如下:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> coll;
for (int i=-3; i<=9; ++i)
{
coll.push_back(i);
}
cout << "number/distance: " << coll.end()-coll.begin() << endl;
vector<int>::iterator pos;
for (pos = coll.begin(); pos < coll.end()-1; pos += 2)
{
cout << *pos << ' ';
}
cout << endl;
}
Julykey 2010-03-08
  • 打赏
  • 举报
回复
因为你使用的是STL中的list,它使用的是双向迭代器,这个和vector是不同的。当然你也可以使用advance来达到你的目的。还有你可以自己去实现list,这样你就可以按照自己的意思跳跃迭代器了
taodm 2010-03-08
  • 打赏
  • 举报
回复
楼主还是找本《stl源码剖析》吧
yyg990441 2010-03-08
  • 打赏
  • 举报
回复
4楼应该说错了,效率不会低,哪怕对于vector,用advance效率也不会低.因为有相关的iterator_traits记录iter的相关信息
peng6sl 2010-03-08
  • 打赏
  • 举报
回复
谢谢各位哈,用advance()就可以做到,不过楼上的为什么会效率低呢
yyg990441 2010-03-08
  • 打赏
  • 举报
回复
可以用advance()来做,如
list<int>::iterator pos = coll.begin();
advance( pos, 3 );
不过,你要保证这样移动3下不会超过链表尾.
为了安全,
最好
if( distance( coll.begin(), coll.end() )<3 ) advance( pos, 3 );
yshuise 2010-03-08
  • 打赏
  • 举报
回复
需要调用函数:advance(iter,5);
冻结 2010-03-08
  • 打赏
  • 举报
回复
list的迭代器,
只能++,--。
不能+1,-1。
可以用advance(), 做++,--的操作。
但,效率低。
healer_kx 2010-03-08
  • 打赏
  • 举报
回复
嗯,和vector的不同,都是原理不同所致。
vector是数组,
list是链表。
昵称很不好取 2010-03-08
  • 打赏
  • 举报
回复
list相当于链表,它的迭代器不能随便加减一个数~~
pengzhixi 2010-03-08
  • 打赏
  • 举报
回复
因为list的迭代器不是随即访问迭代器,只能++或者--不能像vector那么用。

64,637

社区成员

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

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