Joh*_*itb 27
如果从向量中弹出元素,它不会释放内存(因为这会使迭代器无效进入容器元素).您可以将矢量复制到新矢量,然后将其与原始矢量交换.这将使它不浪费空间.Swap具有恒定的时间复杂度,因为交换不能使迭代器无效,而是交换的向量元素:因此它必须只交换内部缓冲区指针.
vector<vertex>(a).swap(a);
Run Code Online (Sandbox Code Playgroud)
它被称为"收缩适合"的习语.顺便提一下,下一个C++版本包含std :: vector的"shrink_to_fit()"成员函数.
通常的技巧是用空向量交换:
vector<vertex>(vertexvector.begin(), vertexvector.end()).swap(vertexvector);
Run Code Online (Sandbox Code Playgroud)
当矢量大小减小时,保留的存储器不会减少,因为它通常对性能更好.缩小向量保留的内存量与增加向量大小超出保留大小一样昂贵,因为它需要:
在某些情况下,分配器可以就地调整分配大小,但绝不保证.
如果您所需的大小发生了很大的变化,并且您知道您不希望该向量再次扩展(本地的主体暗示您会,但当然也有例外),那么您可以使用litb的建议交换操作以显式缩小向量:
vector<vertex>(a).swap(a);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10185 次 |
| 最近记录: |