如何在不调整大小的情况下从std :: vector中删除元素

Mir*_*pas 10 c++ stl

迭代器擦除(迭代器位置);

迭代器擦除(迭代器优先,迭代器最后);

擦除元素从向量容器中移除单个元素(位置)或一系列元素([first,last)).

这有效地减少了矢量大小,删除了元素的数量,之前调用每个元素的析构函数.

和:

去掉

从[first,last]定义的范围中移除所有等于给定值的元素.通过移动范围中的元素以便覆盖所需元素来完成移除.范围的旧端和新端之间的元素保持不变.返回到范围的新结尾的迭代器.

有没有办法从迭代器范围内的std :: vector中删除元素(类似于remove,但是[first,last]中的所有元素)而不调整向量的大小?我需要保持它在运行时达到的最大大小以防止重新分配.

谢谢!

Eri*_*rik 15

resize永远不会减少capacity矢量 - 你可以安全地使用erase它.

使用reserve做一个向量预分配的空间一定数量的项目.除非您实际超过此限制,insert否则erase否则resize将导致重新分配.如果超过它,矢量将在内部reserve增加空间 - 但不会降低内部容量.