删除向量(通过擦除)内存的尾部有效吗?

use*_*139 9 c++ stl

做的时候 v.erase(some_iterator);

实现是否足够聪明,不能进行任何重新分配/字节复制,因为我们只能更新大小?(与严格删除内部元素时不同.)

Bau*_*gen 12

从a std::vector中删除不会使迭代器失效,也不会在第一个擦除元素之前对元素进行引用.

因此,如果仅删除最后一个元素,则可以保证所有其他元素都保持原样,不会移动或复制它们.

但是请注意,从std::vector一般情况下擦除只会改变它的大小,而不是它的容量,因此旧对象所存在的内存仍归其所有vector.这是出于性能原因而无需担心(除非你的RAM耗尽).

此外,被擦除的物体当然是被正确破坏的,所以如果它们不是简单的可破坏的,除了调整它们vector的大小之外,还必须运行它们的析构函数.