查看C ++矢量文档,pop_back()是一个不会导致矢量数据重新分配的函数。但是,这仅适用于删除向量的一个成员。我试图找到一种从矢量末尾擦除多个成员的方法。最初我以为我会在一个小的for循环中调用pop_back()但是如果有一个更方便的函数可以为我做这个游戏我会徘徊吗?
编辑: Cplusplus vector erase() reference并不像juanchopanza所指出的那样清晰。这就是我最初使用erase()丢弃的原因。擦除后,效果很好。
答案 0 :(得分:4)
使用vector::erase
。它不会重新分配内存。
如果擦除的范围没有延伸到容器的末尾,它将重新定位终端元素。这意味着结尾元素将move
d到它们在内存中的适当位置,这可能会导致数据复制。这与后备存储的重新分配不同。如果您的结尾元素是myVector.end()
,则不需要进行重定位。
答案 1 :(得分:3)
您可以使用成员函数erase
。因为根据C ++标准,例如,不会重新分配该向量。 C++17 n4659 standard draft 26.3.11.5 [vector.modifiers]"向量修饰符":
iterator erase(const_iterator position); iterator erase(const_iterator first, const_iterator last);
3效果:在删除点或之后使迭代器和引用无效。
引号的粗体部分表示不会重新分配矢量。