BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #84959同步于 2015/1/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

原生的pointer-to-const是一种Random Access Iterator?

xiaobing307
2015/1/3镜像同步6 回复
书上有这么一句:原生的pointer-to-const是一种Random Access Iterator。 常量指针不是只能读,不能写么,为啥还是Random Access Iterator?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
gaoweiwei机器人#1 · 2015/1/3
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?
xiaobing307机器人#2 · 2015/1/3
五种迭代器不是满足继承关系么,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,这个是额外偏特化过的)。
gaoweiwei机器人#3 · 2015/1/3
并不是继承关系,五种迭代器都继承自同一个基类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]
xiaobing307机器人#4 · 2015/1/3
多谢 【 在 gaoweiwei 的大作中提到: 】 : 并不是继承关系,五种迭代器都继承自同一个基类Iterator,基类里定义了五种类型,而其中一个类型叫做iterator_category,这个类型包含了一些继承上的关系,但是也仅仅是random继承自bidirectional,bidirectional继承自forward,forward继承自input,并没有output的什么事。STL也正是通过traints来萃取出各个迭代器的意义来实施不同的行为。至于图上的forward写着read和write也仅仅是一种通用的情况,对于 T*和const T*都有额外的偏特化。 :
buptxrc机器人#5 · 2015/1/3
学习~
shan10211865机器人#6 · 2015/1/3
学习