将向量重新分配时push_back后收缩容量为零
will vector reallocate when push_back after shrink capacity to zero?
- 在推回之前,我将容量缩小到零,然后我将项目推回向量,它会重新分配吗
- 重新分配是否意味着性能下降
-
如果是这样,为什么需要将容量缩小到零或适合大小?
vector<int> mandy2(5); vector<int>().swap(mandy2); printf("mandy2 size: %dn", mandy2.size()); printf("mandy2 capacity: %dn", mandy2.capacity()); mandy2.push_back(1); mandy2.push_back(2); mandy2.push_back(6);
std::vector
将在容量不足以容纳push_back
请求时重新分配
在推回之前,我将容量缩小到零,然后我推回项目进入vector,它会重新分配吗?
是的。
重新分配是否意味着性能下降?
从长远来看,否(因为每次插入需要O(1)
摊销时间(。我不会担心它,除非评测显示是个问题。
如果是这样,为什么需要将容量缩小到零或适合大小?
我不明白这个问题。
- 是的
- 是的,可能吧。这也意味着迭代器、指针和对容器中元素的引用都是无效的
- 缩小容量将减少容器的内存使用量。这将释放内存供程序的其他部分使用
在推回之前,我将容量缩小到零,然后我将项目推回向量,它会重新分配吗?
是的,会的。
参考文档:
void push_back ( const T& x );
在矢量的末尾,在当前最后一个元素之后添加一个新元素。这个新元素的内容被初始化为x的副本。
这将有效地将向量大小增加一,如果向量大小等于调用前的向量容量,则会重新分配内部分配的存储。重新定位会使之前获得的所有迭代器、引用和指针失效。
reallocate
是否意味着性能下降?
理论上,是的
只有在对代码进行分析后才能得出结论。
如果是这样,为什么需要将
capacity
缩小到零或适合size
?
只有当您知道不想向向量中添加任何其他元素时,才可以这样做,这样可以确保向量不会消耗比实际需要的内存更多的内存。
相关文章:
- 具有非整数边容量的最大流量的Dinic算法
- 将stl字符串缩小到小于15个字符的容量
- 推导 std::vector::back() 的返回类型
- 在容量内调整矢量大小时的性能影响
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- std::vector的容量会降低吗?
- 可视化C++载体:未使用的容量
- 如何在 c++ 中清除矢量容量?
- 当我将其插入无序地图时,矢量的容量为 0
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- OLE DB 大容量复制操作始终将 true 加载到位列中
- 将结构 std::memcpy 转换为具有足够容量的 std::vector 是未定义的行为<char>吗?
- std::string::reserve没有被允许创建具有精确容量的std::string
- 当矢量改变容量时,有什么方法可以更新指针/参考值
- 使用准备好的语句大容量插入到postgresql
- 制作 std::矢量容量>=N 和大小=0 的最佳方法是什么?
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- C++ STL 向量保留太多容量会消耗大量内存吗?
- 为 STD 载体模板专业化预留容量<bool>
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误