有没有办法减少矢量的容量?
我的代码将值插入到向量中(事先不知道它们的数字),当这完成时,向量仅用于读取操作.
我想我可以创建一个新的向量,用大小做一个.reseve()并复制项目,但我真的不喜欢额外的复制操作.
PS:我不关心便携式解决方案,只要它适用于gcc.
就算法而言,从连续数组中移除一组元素可以在两个部分中有效地完成.
这可以C++用擦除 - 移除习语来完成.
vector<T> v; // v = {0,1,2,3,0,0,7};
vector<T>::iterator it = remove(v.begin(),v.end(),e);
// move all elements not to be deleted to the front
// Yes, remove is not the brightest name for that.
// Especially as list::remove really remove elements from the list.
// now v = {1,2,3,7,?,?,?} results marked in question marks
// are implementation dependent.
v.erase(it,v.end());
// get rid of the elements marked as question marks.
// v = {1,2,3,7}
Run Code Online (Sandbox Code Playgroud)
现在,问号中元素的内容是未知的.我们唯一可以做的就是摆脱它们(通过覆盖它们,或者删除它们).
有 …