【发布时间】:2014-07-28 21:25:12
【问题描述】:
查看 C++ 向量文档,pop_back() 是一个不会导致向量数据重新分配的函数。但是,这仅适用于删除向量的一个成员。我正在尝试找到一种从向量末尾删除多个成员的方法。最初我以为我会在一个小的 for 循环中调用 pop_back() 但我在徘徊是否有更方便的函数可以为我做这件事?
编辑: Cplusplus vector erase() reference 并不像 juanchopanza 指出的那样清晰。这就是我最初使用erase() 丢弃的原因。毕竟擦除,效果很好。
【问题讨论】:
-
@juanchopanza Erase 会导致重新分配。
-
@juanchopanza 我在这里读到cplusplus.com/reference/vector/vector/erase“擦除除向量端以外的位置的元素会导致容器在擦除段后将所有元素重新定位到它们的新位置。”
-
这是一个令人遗憾的误导性引用(cplusplus.com 的引用)。如果它重新分配,它就无法保持迭代器的有效性和对第一次擦除之前元素的引用。
-
@sgtHale:首先你混淆了重新分配(
erase没有完成)和元素的可能移动/复制超过最后一个删除的元素。 relocate 不同于 reallocate。
标签: c++ memory-management vector