社区
C++ 语言
帖子详情
关于list的iterator如何加减
peng6sl
2010-03-08 01:30:40
小弟初学STL中的list,有许多都不太明白,关于iterator我所知道似乎是一个指向list的指针,我想让这个iterator可以跳跃的加减,而不是只能 iterator++,iterator--的用,我也试过iterator+2但是都不行,只能一个一个来,
还请指点指点哈
...全文
899
11
打赏
收藏
关于list的iterator如何加减
小弟初学STL中的list,有许多都不太明白,关于iterator我所知道似乎是一个指向list的指针,我想让这个iterator可以跳跃的加减,而不是只能 iterator++,iterator--的用,我也试过iterator+2但是都不行,只能一个一个来, 还请指点指点哈
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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那么用。
java入门-第16章 Collection、泛型、
Iterator
本课程为想转行学IT的朋友量身定制,快速入门,轻松上手,让非计算机专业的同学能快速学会Java编程. 课程会从计算机的基本组成原理讲起,门槛低,实用性强,让大家轻松掌握一项编程技能。后期课程全部更新完毕后还会帮大家推荐就业,指导简历编写,以及面试相关的指导.
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
以前在遍历vector的时候,经常使用
iterator
之间的
加减
来获得元素在容器里面的index。 今天在进行
list
的
iterator
加减
的时候,发现不能编译通过,后面想起
list
是非线性的容器,不能
加减
。 查了一下资料,发现s
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
http://blog.csdn.net/tangaowen/article/details/7515558
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
以前在遍历vector的时候,经常使用
iterator
之间的
加减
来获得元素在容器里面的index。 今天在进行
list
的
iterator
加减
的时候,发现不能编译通过,后面想起
list
是非线性的容器,不能
加减
。
STL
list
"
list
iterator
not incrementable"
这几天在vc.net下写一个小东西,涉及到
list
的使用.程序运行到使用erase删除
list
中某个元素的时候,会弹出异常对话框,提示的异常为:”
list
iterator
not incrementable”.调试检查半天无果,就特意写了一个小程序测试: #include #include #include using namespace std; int main() {
C++中
list
和forward_
list
的迭代器不支持
加减
运算
C++中
list
和forward_
list
的迭代器不支持
加减
运算,这是因为什么原因呢? 那是因为双向链表和单向链表存储元素都不是在一块连续的内存上,所以无法通过
加减
法远距离查找元素。 下面是测试源码: #include #include #include using namespace std; int main(void) {
list
lst1={1,5,7,10,15};
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章