社区
C++ 语言
帖子详情
关于list的iterator如何加减
peng6sl
2010-03-08 01:30:40
小弟初学STL中的list,有许多都不太明白,关于iterator我所知道似乎是一个指向list的指针,我想让这个iterator可以跳跃的加减,而不是只能 iterator++,iterator--的用,我也试过iterator+2但是都不行,只能一个一个来,
还请指点指点哈
...全文
938
11
打赏
收藏
关于list的iterator如何加减
小弟初学STL中的list,有许多都不太明白,关于iterator我所知道似乎是一个指向list的指针,我想让这个iterator可以跳跃的加减,而不是只能 iterator++,iterator--的用,我也试过iterator+2但是都不行,只能一个一个来, 还请指点指点哈
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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那么用。
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
以前在遍历vector的时候,经常使用
iterator
之间的
加减
来获得元素在容器里面的index。 今天在进行
list
的
iterator
加减
的时候,发现不能编译通过,后面想起
list
是非线性的容器,不能
加减
。 查了一下资料,发现s
C++之std::
list
<string>::
iterator
迭代器应用实例(一百七十九)
本篇目的:C++之std::
list
::
iterator
迭代器应用实例。
List
迭代器介绍在C++中,
list
是一个双向链表容器,可以用来存储和操作一系列的元素。迭代器是一种用于遍历容器的对象,它提供了对容器中元素的访问和操作。对于
list
iterator
和。它们的功能相似,但
iterator
可以用于修改容器中的元素,而则只能用于读取元素,不能修改。使用迭代器可以按照顺序访问链表中的元素,并进行增加、删除和修改操作。begin():返回指向链表第一个元素的迭代器。end()
【C++】深入理解自定义
list
容器中的
list
_
iterator
:迭代器实现详解
通过,我们实现了自定义
list
容器的标准遍历方式。总结封装节点指针通过持有
list
_node指针_node来访问和移动链表节点。重载操作符和->用于访问节点数据。++和--用于迭代器的前进和后退。==和!用于迭代器的比较。与
list
list
_node的关系依赖
list
_node实现节点移动和数据访问。
list
通过提供统一的接口,使链表可以通过迭代器进行遍历、插入和删除操作。通过,自定义的
list
容器具备了与 STL 容器一致的遍历能力,使链表在不连续内存结构中也可以支持标准的迭代器操作。
STL
list
"
list
iterator
not incrementable"
这几天在vc.net下写一个小东西,涉及到
list
的使用.程序运行到使用erase删除
list
中某个元素的时候,会弹出异常对话框,提示的异常为:”
list
iterator
not incrementable”.调试检查半天无果,就特意写了一个小程序测试: #include #include #include using namespace std; int main() {
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
http://blog.csdn.net/tangaowen/article/details/7515558
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
以前在遍历vector的时候,经常使用
iterator
之间的
加减
来获得元素在容器里面的index。 今天在进行
list
的
iterator
加减
的时候,发现不能编译通过,后面想起
list
是非线性的容器,不能
加减
。
C++ 语言
65,192
社区成员
250,525
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章