我查看了一些C++容器(vector,deque,list,map,set),发现它们都没有实现
erase(reverse_iterator position)
Run Code Online (Sandbox Code Playgroud)
有一种方法可以从reverse_iterator获取迭代器,如本答案中所述.
但是为什么上面的容器没有用reverse_iterator参数实现擦除成员函数?
迭代器和reverse_iterator之间是否有任何显着差异,这使得这样的实现很难或者由于其他原因而没有实现?
几乎任何容器函数都可以问同样的问题:为什么不为反向迭代器实现它?答案可能是一个简单的事实:反向迭代器可以通过base()调用轻松转换为常规迭代器。将调用的负担放在用户身上更有意义base(),而不是通过为每个容器实现“反向”版本来几乎使容器的功能数量增加一倍。
有人可能会说,它打破了外部上下文中通过反向迭代器处理这些容器的容器的“通用性”。但从一开始,反向迭代器就被设计为“不同的”,并且在除了最琐碎的上下文之外的所有上下文中不一定与普通迭代器兼容。