返回信息流书上有这么一句:原生的pointer-to-const是一种Random Access Iterator。
常量指针不是只能读,不能写么,为啥还是Random Access Iterator?
这是一条镜像帖。来源:北邮人论坛 / cpp / #84959同步于 2015/1/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
原生的pointer-to-const是一种Random Access Iterator?
xiaobing307
2015/1/3镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
Random access iterator没有要求满足写(读是要求的),Random是Bidirectional的强化,Bidirectional是Forward的强化,而Forward除了满足input的要求外还要满足几点,其中的一点是这样的:如果迭代器类型X是可变迭代器,T是值的类型,那么X::reference是T&,如果X是const iterator,那么X::reference是const T&(多说一点,此时X::value_type是T而非const T,这个是额外偏特化过的)。
【 在 xiaobing307 的大作中提到: 】
: 书上有这么一句:原生的pointer-to-const是一种Random Access Iterator。
: 常量指针不是只能读,不能写么,为啥还是Random Access Iterator?
五种迭代器不是满足继承关系么,Random是从Input和Output继承而来,那不应该读和写都可以么?
c++ primer(第四版)上有这样一个表格:
【 在 gaoweiwei 的大作中提到: 】
: Random access iterator没有要求满足写(读是要求的),Random是Bidirectional的强化,Bidirectional是Forward的强化,而Forward除了满足input的要求外还要满足几点,其中的一点是这样的:如果迭代器类型X是可变迭代器,T是值的类型,那么X::reference是T&,如果X是const iterator,那么X::reference是const T&(多说一点,此时X::value_type是T而非const T,这个是额外偏特化过的)。
并不是继承关系,五种迭代器都继承自同一个基类Iterator,基类里定义了五种类型,而其中一个类型叫做iterator_category,这个类型包含了一些继承上的关系,但是也仅仅是random继承自bidirectional,bidirectional继承自forward,forward继承自input,并没有output的什么事。STL也正是通过traints来萃取出各个迭代器的意义来实施不同的行为。至于图上的forward写着read和write也仅仅是一种通用的情况,对于 T*和const T*都有额外的偏特化。
【 在 xiaobing307 的大作中提到: 】
: 五种迭代器不是满足继承关系么,Random是从Input和Output继承而来,那不应该读和写都可以么?
: c++ primer(第四版)上有这样一个表格:
: [upload=1][/upload]
多谢
【 在 gaoweiwei 的大作中提到: 】
: 并不是继承关系,五种迭代器都继承自同一个基类Iterator,基类里定义了五种类型,而其中一个类型叫做iterator_category,这个类型包含了一些继承上的关系,但是也仅仅是random继承自bidirectional,bidirectional继承自forward,forward继承自input,并没有output的什么事。STL也正是通过traints来萃取出各个迭代器的意义来实施不同的行为。至于图上的forward写着read和write也仅仅是一种通用的情况,对于 T*和const T*都有额外的偏特化。
: