清空vector并释放内存需用swap技巧或shrink_to_fit;clear仅删除元素不释放内存,swap通过临时对象交换释放容量,C++11后可用shrink_to_fit请求缩减容量。

在C++中,清空一个
vector并释放其内存是常见操作。很多人误以为调用
clear()会释放内存,但实际上它只清除元素,容器的容量(capacity)可能保持不变。要真正释放内存,需要采取额外措施。
1. 使用 clear() 清空元素
clear() 会移除
vector中的所有元素,将其大小(size)设为0,但不保证释放底层内存。 示例:
std::vectorvec = {1, 2, 3, 4, 5}; vec.clear(); // 元素被删除,size 变为 0 // 此时 capacity 可能仍为 5 或更大
2. 清空并释放内存:swap技巧
最经典的方法是使用空vector与原vector交换,强制释放内存。
std::vectorvec = {1, 2, 3, 4, 5}; std::vector ().swap(vec); // 原vector内存被释放,capacity变为0
这行代码创建一个临时空
vector,通过
swap与其交换内容,原内存随临时对象销毁而释放。
立即学习“C++免费学习笔记(深入)”;
3. C++11 及以后:shrink\_to\_fit()
C++11引入了shrink\_to\_fit(),请求容器减少容量以匹配当前大小。
std::vectorvec = {1, 2, 3, 4, 5}; vec.clear(); vec.shrink_to_fit(); // 尝试释放多余内存
注意:
shrink_to_fit()是非强制性请求,标准库实现可能忽略它,但在主流编译器(如GCC、Clang、MSVC)中通常有效。
4. 赋值为空vector(简洁写法)
另一种等效方式是直接赋值一个空
vector。
std::vectorvec = {1, 2, 3, 4, 5}; vec = std::vector (); // 等价于 swap 技巧,内存会被释放
这种写法更直观,编译器优化后性能与
swap相当。
基本上就这些方法。如果只是临时清空且后续还会添加元素,用
clear()就够了;若需彻底释放内存,推荐
swap或
shrink_to_fit。实际选择取决于C++版本和性能要求。











