这句话如何理解???急~~~

block1956815 2004-09-17 09:25:42
这个list容器,就象你所想的,它不支持在iterator加一个数来指向隔一个的对象。 就是说,我们不能用Milkshakes.begin()+2来指向list中的第三个对象,因为STL的list是以双链的list来实现的, 它不支持随机存取。vector和deque(向量和双端队列)和一些其他的STL的容器可以支持随机存取。

但是这个例子:
for (MilkshakeIterator=Milkshakes.begin();

MilkshakeIterator!=Milkshakes.end();

++MilkshakeIterator) {

// dereference the iterator to get the element

cout << *MilkshakeIterator << endl;

}
也是遍历一个list啊? ++MilkshakeIterator不也是iterator++了吗? 是什么意思呢? 请解释一下
多谢~~~
...全文
160 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
njSeeWhy 2004-09-17
  • 打赏
  • 举报
回复
对一个迭代器++不一定等于迭代器+1,只是对可随机访问的迭代器这两个操作是等价的。所有的迭代器都支持operator ++(前缀和后缀都支持),但并不一定都支持算术运算。
Don_Ras 2004-09-17
  • 打赏
  • 举报
回复
楼主应该先要了解一下什么是concept,然后是几种iterator的区别,否则光看书上这样说没用。
whyglinux 2004-09-17
  • 打赏
  • 举报
回复
list<string> slist ;
list<string>::iterator siter = slist.begin();
siter = slist.insert(siter, "curpos");
slist.insert(siter, "second");
block1956815 2004-09-17
  • 打赏
  • 举报
回复
现在我改成这样
但是运行出错:
list<string> slist ;
list<string>::siter;
slist.insert(siter , "curpos");
slist.insert(++forwarditer , "second"); //意思就是在"curpos“后面插入”second“
改怎么写?
whyglinux 2004-09-17
  • 打赏
  • 举报
回复
原因是这样的:

正如你开始所说的,list容器不支持随机存取,只支持顺序存取。由于这个原因,对于遍历容器的iterator,list容器只定义了 ++ 和 -- 运算符,而没有定义 +、-以及 +=、-= 运算符。因此,尽管是同样的加 1 运算,但是它们的意义是不同的: ++MilkshakeIterator调用的是 operator++() 函数,而对于 MilkshakeIterator = MilkshakeIterator + 1 或者 MilkshakeIterator += 1,由于其 + 和 += 运算符在 list 类中没有定义实现,所以这样使用它们是非法的。
block1956815 2004-09-17
  • 打赏
  • 举报
回复
to SayaMM

当然是中国人!!! 谢绝灌水!!!
block1956815 2004-09-17
  • 打赏
  • 举报
回复
下面是我看的一偏文章里的一段话:
“这个list容器,就象你所想的,它不支持在iterator加一个数来指向隔一个的对象。 就是说,我们不能用Milkshakes.begin()+2来指向list中的第三个对象,因为STL的list是以双链的list来实现的, 它不支持随机存取。vector和deque(向量和双端队列)和一些其他的STL的容器可以支持随机存取。 ”

同时文章里也有这样一个例子:

for (MilkshakeIterator=Milkshakes.begin();

MilkshakeIterator!=Milkshakes.end();

++MilkshakeIterator) {

// dereference the iterator to get the element

cout << *MilkshakeIterator << endl;

}
于是 我的问题:
也是遍历一个list啊? ++MilkshakeIterator不也是iterator++了吗? 是什么意思呢? 请解释一下
多谢~~~


SayaMM 2004-09-17
  • 打赏
  • 举报
回复
中国人?
darkstar21cn 2004-09-17
  • 打赏
  • 举报
回复
把我看晕了,不知所云,我还想让楼主解释一下你说的什么意思呢

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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