+-- 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, - 需要进入
+1v.rbegin()替代v.end()设计,
只是在相反的情况下。
所以我的问题是:做出确实已经做出的选择是否有明确的优势?或者它只是一枚翻转的硬币?