为什么c ++容器不实现擦除(reverse_iterator位置)?

时间:2015-08-02 17:54:43

标签: c++ c++11

我查看了一些C ++容器(vector,deque,list,map,set),发现它们都没有实现

erase(reverse_iterator position)

有一种方法可以从reverse_iterator获取迭代器,如answer中所述。

但为什么上面的容器没有用reverse_iterator参数实现擦除成员函数?

iterator和reverse_iterator之间是否有任何显着差异,这使得这样的实现很难或者由于其他原因而没有实现?

1 个答案:

答案 0 :(得分:4)

可以询问几乎所有容器函数的相同问题:为什么不为反向迭代器实现它?答案可能是一个简单的事实,即反向迭代器可以通过base()调用轻松转换为常规迭代器。将调用base()的负担放在用户身上更有意义,而不是通过为每个单独的一个实现“反向”版本,几乎使容器的功能数量增加一倍。

有人可以说它打破了通过反向迭代器处理这些容器的外部上下文中容器的“普遍性”。但是从一开始,反向迭代器就被设计为“不同的”,并且除了最简单的上下文之外,并不一定与普通迭代器兼容。