返回信息流迭代器是否可以遍历list? 为什么primer中说指向list的迭代器不可以进行算数加减?
第一问如果可以的话 就会用到++运算 那么就产生了上面第二个问题
这是一条镜像帖。来源:北邮人论坛 / cpp / #12883同步于 2008/9/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
迭代器是否可以遍历list? 为什么primer中说指向list的迭代器不
xmilier
2008/9/20镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 ericyosho 的大作中提到: 】
: list是链表,内存上存储是不连续的。
: +法的位置不能确定啊,只能自加和自减,底层的实现就是*next互相引用的。
en 是滴
【 在 xmilier 的大作中提到: 】
: 那连续的两次自加 和直接加二有什么区别
说到底就是他list库实现的时候就只支持++ 不支持加一个数值。其实这样的设计也是很安全和合理的。
自加,编译器只是把指针 p = p->next
那你说你p+100,编译器还能自动生成
for (int i = 0; i < 100; i++) {
p = p->next;
}
这个编译器也太智能了吧。没见过。
不用编译器支持,list可以把这个做到它的实现里面吧,加一个二元操作符+就可以了。至于为什么没有,不知道。
【 在 ericyosho 的大作中提到: 】
: 自加,编译器只是把指针 p = p->next
: 那你说你p+100,编译器还能自动生成
: for (int i = 0; i < 100; i++) {
: ...................
【 在 pmps 的大作中提到: 】
: 不用编译器支持,list可以把这个做到它的实现里面吧,加一个二元操作符+就可以了。至于为什么没有,不知道。
STL再怎么封装,也还是完全遵循基本的算法与数据结构的,你弄个+操作符出来,很容易误导用户,让用户以为是可以随机访问的。我还倒没见过哪本讲数据结构的书上会给链表添加这么一个操作,没必要。