相关疑难解决方法(0)

减少stl向量的容量

有没有办法减少矢量的容量?

我的代码将值插入到向量中(事先不知道它们的数字),当这完成时,向量仅用于读取操作.

我想我可以创建一个新的向量,用大小做一个.reseve()并复制项目,但我真的不喜欢额外的复制操作.

PS:我不关心便携式解决方案,只要它适用于gcc.

c++ stl vector

26
推荐指数
4
解决办法
2万
查看次数

是否有理由在擦除删除习语之外使用`remove`?

就算法而言,从连续数组中移除一组元素可以在两个部分中有效地完成.

  1. 将所有不要删除的元素移动到数组的前面.
  2. 将数组标记为较小.

这可以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)

现在,问号中元素的内容是未知的.我们唯一可以做的就是摆脱它们(通过覆盖它们,或者删除它们).

有 …

c++ stl

7
推荐指数
1
解决办法
331
查看次数

标签 统计

c++ ×2

stl ×2

vector ×1