clear() 清空元素但不释放内存,capacity不变;vec = {} 或 swap(std::vector{}) 可彻底释放内存;erase/assign 效果同 clear() 但语义差;清空后 data() 非空仍属未定义行为。
clear() 是最直接的清空方式,但不释放内存
clear() 会销毁所有元素、将 size() 变为 0,但底层分配的内存通常保留(capacity() 不变)。适用于后续还会 push 大量新元素的场景,避免反复分配。
常见误判:调用 clear() 后发现内存没降 —— 这是正常行为,不是 bug。
- 使用场景:循环复用 vector,比如帧数据缓冲区
- 注意:若元素类型有析构逻辑(如含文件句柄、锁等),
clear()会逐个调用析构函数 - 性能影响:O(n) 时间复杂度,n 为当前 size;空间无额外开销
swap + vector{} 彻底释放内存(C++11 起推荐)
想真正归还内存给系统?用 vec.swap(std::vector{}); 或更简洁的 vec = {};(C++11 起支持)。这会触发移动赋值,使原 vector 的 capacity 归零。
错误写法:std::vector().swap(vec) 在 C++11 前常用,现在可读性差且无必要。
立即学习“C++免费学习笔记(深入)”;