sgt*_*ale 6 c++ memory-management vector
查看 C++ 向量文档,pop_back() 是一个不会导致向量数据重新分配的函数。但是,这只适用于删除向量的一个成员。我试图找到一种方法来从向量的末尾擦除多个成员。最初我以为我会在一个小的 for 循环中调用 pop_back() 但是我在徘徊是否有更方便的函数可以为我做这件事?
编辑:Cplusplus 向量擦除()参考并不像 juanchopanza 所指出的那样清晰。这就是为什么我最初放弃使用擦除()。毕竟擦除,效果很好。
使用vector::erase. 它不会重新分配内存。
如果您擦除的范围没有延伸到容器的末尾,它将重新定位结束元素。这意味着结束元素将被放置move到它们在内存中的适当位置,这可能会导致数据复制。这与重新分配后备存储不同。如果您的结束元素是myVector.end(),则不需要发生重定位。
您可以使用成员函数erase。向量不会被重新分配,因为根据 C++ 标准,例如C++17 n4659 标准草案26.3.11.5 [vector.modifiers]“向量修饰符”:
Run Code Online (Sandbox Code Playgroud)iterator erase(const_iterator position); iterator erase(const_iterator first, const_iterator last);3 效果:在擦除点或擦除点之后使迭代器和引用无效。
引号中的粗体部分表示向量不会被重新分配。