+-- v.begin() +-- v.end()
| |
v v
+---+---+---+---+---+---+ - +
| o | o | o | o | o | o | x |
+---+---+---+---+---+---+ - +
+ - +---+---+---+---+---+---+
| x | o | o | o | o | o | o |
+ - +---+---+---+---+---+---+
^ ^
| |
+-- v.rend() +-- v.rbegin()
(ASCII 从这个答案中复制和编辑,这实际上是提示我提出当前问题。)
我确实看到了它的好处&*rit == &*(rit.base() - 1)
,因为这样我可以将rit.base()
用于任何反向迭代器rit
,并且我总是会得到一个有效的迭代器。
但同时
- 我不能取消引用
v.rbegin().base()
;我必须记得先减去 1,*(v.rbegin().base() - 1)
, - 我不能完全取消引用
v.rend().base() - 1
,因为我不能取消引用v.rend()
。
如果设计就是这样&*rit == &*rit.base()
呢?
- 我们不能调用, 是的,但这只是对应于当前设计
v.rend().base()
中无法取消引用;v.rend().base() - 1
- 我们将无法
v.end()
直接从反向迭代器中获取,甚至不能从最接近的迭代器中获取b.rbegin()
,但- 1
我们必须rit.base()
在当前设计中添加到以获取与反向相同元素的正向迭代器。
我的意思是,在我看来,无论设计决定是那个&*rit == &*(rit.base() - 1)
(原样)还是那个&*rit == &*rit.base()
,我们都会有同样的便利
rit.base()
在实际设计中总是可以的,- 1
在替代设计中通常不需要
和不便
- 不能取消引用
rit.base()
实际设计中的所有有效 s, - 需要进入
+1
v.rbegin()
替代v.end()
设计,
只是在相反的情况下。
所以我的问题是:做出确实已经做出的选择是否有明确的优势?或者它只是一枚翻转的硬币?