为什么c ++容器不能执行擦除(反向)
我看了一些C ++容器(vector,deque,list,map,set),发现它们都没有实现
erase(reverse_iterator position)
如本答案中所述,有一种方法可以从reverse_iterator获取迭代器。
但是为什么上面的容器不使用reverse_iterator参数实现擦除成员函数呢?
迭代器和reverse_iterator之间是否存在重大差异,导致这种实现困难或者由于其他原因而未实现?
几乎所有的容器函数都可以被问到同样的问题:为什么它没有为反向迭代器实现? 答案可能是简单的事实,即逆向迭代器可以通过base()
调用很容易地转换为常规迭代器。 将base()
调用放在用户上的负担更有意义,而不是通过为每个单独的一个实现一个“反向”版本,使容器的函数数量几乎翻倍。
人们可以争辩说,它打破了通过反向迭代器处理这些容器的外部上下文中的容器的“普遍性”。 但是从一开始,反向迭代器就被设计为“不同的”,并且在除了最琐碎的上下文中都不一定与正常的迭代器兼容。
链接地址: http://www.djcxy.com/p/87361.html