清除向量会影响它的容量吗?
Does clearing a vector affect its capacity?
实例化一个std::vector foo(1000)
foo.size()
现在是1000,foo.capacity()
也是1000。
如果我用foo.clear()
清除向量,size()
现在是0,但是capacity()
是什么?标准对此有什么规定吗?
不,它没有。向量的容量永远不会减小。这不是标准所要求的,但在vc++和c++的标准库实现中都是如此。为了设置刚好适合大小的容量,可以使用著名的交换技巧
vector<T>().swap(foo);
在c++ 11标准中,您可以更明确地这样做:
foo.shrink_to_fit();
要清除vector并消耗尽可能少的容量,请使用swap技巧:
std::vector<T>().swap(foo);
创建一个空向量,将其内部结构与foo
交换,然后销毁临时向量,去掉曾经属于foo
的元素,留下foo
,就好像它是新创建的一样。
不,清除不影响它的容量(),它保持不变,即使你做清除。如果你想缩小矢量以适应,你可以在调用clear后使用以下技巧:foo.swap(向量(foo));
标准没有提到clear
对capacity
的影响
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- C++ STL 向量保留太多容量会消耗大量内存吗?
- 在具有容量/调整大小的类中初始化向量
- 在将其尺寸较大的向量移动到容量较小的向量之前,是否可以通过使用Reserve()来提高代码性能
- 如何在vector::clear()上保持向量元素的容量
- 为什么向量具有不同的容量,而不是大小
- std::向量预分配(大小 n,容量 n + 2)
- C++中向量的初始容量
- 初始化具有预留容量的嵌套向量的子向量
- 从中移动数据的向量的容量
- 为什么在达到容量后在向量中插入时,C++不处理迭代器?
- 具有奇数大小的c++ STL向量,在添加任何内容之前容量为0
- 为什么向量的容量在传递给函数后变得等于它的大小?
- 将向量重新分配时push_back后收缩容量为零
- 清除向量会影响它的容量吗?