1.关联容器不能作为Remove 算法的目标容器,原因很简单,它可能改变元素的值或者位置,使得元素不再是排序好的状态,这样就打破了关联容器中元素必须是自动排序的规则。实际上对于关联容器的iterator,它对应的应该是一个常量(Key)。既然我们不能直接用算法操作关联容器,那我们如果remove关联容器中的元素呢?答案是用调用关联容器的成员函数!每个关联容器都提供了成员函数去remove 元素,比如可以调用成员函数erase.
2.即使你能够使用算法,容器可能也提供了成员函数去做同样的事情,而且性能可能要更好,因为算法不知道它操作的具体容器是什么,只能以通用的方法操作所有的容器。以前一个例子为基础,我们使用成员函数实现同样的效果:
输出结果为:
Pre: 6 5 4 3 2 1 1 2 3 4 5 6
Pos: 6 5 4 2 1 1 2 4 5 6
如果性能是你主要的考虑因素的话,应该总是优先考虑使用成员函数而非通用算法。使用成员函数的缺点是你必须修改代码当换成另外一种容器类型的时候。因为成员函数是不通用的。