c++在不重新分配的情况下擦除vector末端的部分



查看c++ vector文档,pop_back()是一个不会导致vector数据重新分配的函数。然而,这只适用于删除向量的一个成员。我试图找到一种方法来擦除多个成员从一个向量的结束。最初我以为我会在一个小的for循环中调用pop_back(),但我在徘徊是否有一个更方便的函数可以为我做这件事?

编辑:Cplusplus的vector erase()引用并不像juanchopanza指出的那样清晰。这就是为什么我最初放弃使用erase()。最后擦除,效果很好

使用vector::erase。它不会重新分配内存。

如果擦除的范围没有扩展到容器的末尾,它将重新定位结束元素。这意味着结束元素将被move d到它们在内存中的适当位置,这可能会导致数据复制。这与重新分配后备存储不同。如果结束元素是myVector.end(),则不需要进行重新定位。

可以使用成员函数erase。vector将不会被重新分配,因为根据c++标准,例如c++ 17 n4659标准草案26.3.11.5 [vector。修饰符]"矢量修饰符";

iterator erase(const_iterator position);
iterator erase(const_iterator first, const_iterator last);
使位于擦除符位置或之后的迭代器和引用失效。

引号的粗体部分表示vector将不会被重新分配。

最新更新