清空vector常用clear(),不释放内存;2. 需释放内存时用swap技巧;3. assign和resize也可清空但较少用;4. 根据是否需释放内存选择合适方法。

在C++中清空一个 vector 是一个常见操作,有多种方式可以实现。以下是几种常用且有效的方法,适用于不同场景。
1. 使用 clear() 方法
这是最直接、最常用的方式。调用 clear() 会移除 vector 中的所有元素,使其变为空容器,但不会释放已分配的内存。语法:
vec.clear();
示例:
#include#include std::vector vec = {1, 2, 3, 4, 5}; vec.clear(); // 清空所有元素 std::cout << "Size: " << vec.size() << std::endl; // 输出 0
注意:虽然 size 变为 0,但 capacity 可能保持不变。
立即学习“C++免费学习笔记(深入)”;
2. 使用 swap 技巧释放内存
如果希望清空 vector 并释放其占用的内存,可以使用与一个空 vector 交换的方式。语法:
std::vector().swap(vec);
或更简洁写法:
vec.swap(std::vector());
说明:
- 创建一个临时的空 vector
- 通过 swap 将原 vector 的内容与临时对象交换
- 原 vector 变为空,临时对象在作用域结束时析构并释放内存
这种方法常被称为“收缩到适应”(shrink-to-fit)技巧。
3. 使用 assign 清空
调用 assign() 并传入 0 个元素,也可以达到清空效果。语法:
vec.assign(0, T{});
例如:
vec.assign(0, 0); // 清空 int 类型的 vector
这种方式较少使用,但在某些需要兼容旧代码的场合可能有用。
4. 结合 resize(0)
将 vector 大小调整为 0,也能清空内容。语法:
vec.resize(0);
效果类似于 clear(),不保证释放内存。
如何选择合适的方法?
- 一般情况使用 clear() —— 简单高效
- 需要释放内存时使用 swap 技巧
- 避免频繁清空大 vector 而不释放内存,以防内存浪费
基本上就这些。根据是否需要释放内存来选择 clear 或 swap 即可,其他方法属于补充手段。











