社区
C++ 语言
帖子详情
关于list的iterator如何加减
peng6sl
2010-03-08 01:30:40
小弟初学STL中的list,有许多都不太明白,关于iterator我所知道似乎是一个指向list的指针,我想让这个iterator可以跳跃的加减,而不是只能 iterator++,iterator--的用,我也试过iterator+2但是都不行,只能一个一个来,
还请指点指点哈
...全文
933
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的... 今天在进行
list
的
iterator
加减
的时候,发现不能编译通过,后面想起
list
是非线性的容器,不能
加减
。 查了一下资料,发现s
【C++】深入理解自定义
list
容器中的
list
_
iterator
:迭代器实现详解
通过,我们实现了自定义
list
容器的标准遍历方式。总结封装节点指针通过持有
list
_node指针_node来访问和移动链表节点。重载操作符和->用于访问节点数据。++和--用于迭代器的前进和后退。==和!用于迭代器的比较。与...
STL
list
"
list
iterator
not incrementable"
程序运行到使用erase删除
list
中某个元素的时候,会弹出异常对话框,提示的异常为:”
list
iterator
not incrementable”.调试检查半天无果,就特意写了一个小程序测试: #include #include #include using namespace ...
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
http://blog.csdn.net/tangaowen/article/details/7515558
使用stl中的 advance和 distance 方法来进行
iterator
的
加减
以前在遍历vector的时候,经常使用... 今天在进行
list
的
iterator
加减
的时候,发现不能编译通过,后面想起
list
是非线性的容器,不能
加减
。
使用STL里标准
list
以及
iterator
实现多项式加法
使用STL里标准
list
以及
iterator
实现多项式加法 利用C++标准模板库
LIST
实现多项式加法,可参考课本(P526-533)。求以下两个多项式的和: F(x)=8x7+7x4+3x2+5 G(x)=9x6+2x5+5x4+x+2 编译环境 在 Visual Studio 2019 ...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章