跳转到内容

更多 C++ 惯用法/清空并最小化

来自维基教科书,开放世界中的开放书籍

清空并最小化

[编辑 | 编辑源代码]

清空容器并最小化容器的容量。

这有时被称为“与临时变量交换”惯用法。

标准库容器通常分配的内存比实际元素数量要多。这种策略可以优化在容器大小增加时节省一些分配。另一方面,当容器大小减小时,容器中通常会有剩余的容量。容器的剩余容量可能是对内存资源的浪费。清空并最小化惯用法已被开发用于清空容器并将额外的容量减少到最少(为零),从而节省内存。

解决方案和示例代码

[编辑 | 编辑源代码]

实现清空并最小化惯用法与下面给出的示例一样简单。

std::vector<int> v;
//... Lots of push_backs and then lots of removes on v.
std::vector<int>().swap (v);

语句的第一部分std::vector<int>()创建一个临时vector<int>,它保证分配零原始内存或实现的最小值。语句的第二部分使用非抛出交换惯用法将临时变量与v交换,这是一种高效的做法。交换后,编译器创建的临时变量将超出范围,而v最初持有的内存块将被释放。

C++11 中的解决方案

[编辑 | 编辑源代码]

从 C++11 开始,一些容器声明了shrink_to_fit()函数,比如 vector、deque 和 basic_string。shrink_to_fit()是一个非绑定请求,用于将capacity()减少到size()。因此,使用clear()shrink_to_fit()是一个非绑定请求,用于清空并最小化。

已知用途

[编辑 | 编辑源代码]
[编辑 | 编辑源代码]
华夏公益教科书