【发布时间】:2013-10-18 06:48:14
【问题描述】:
我有一个疑问,我想在脑海中澄清一下。我知道std::vector 在erase 和std::remove 之间的不同行为,其中第一个从向量中物理删除一个元素,减小大小,另一个只是移动一个元素,使容量保持不变。
这仅仅是出于效率原因吗?通过使用erase,std::vector中的所有元素都会被移位1,造成大量的拷贝; std::remove 只是进行“逻辑”删除,并通过移动东西使向量保持不变。如果物体很重,那么这种差异可能很重要,对吧?
【问题讨论】:
-
@larsmans,你错了。 OP 是正确的 - 有
std::remove模板函数可以执行 OP 所说的操作。 -
@larsmans 不正确。
std::remove是一种将集合中的元素标记为已删除的算法。 -
参见 Scott Meyers 的“Item 32”,“Effective STL”,Addison-Wesley,2001 年,第 139-143 页。