提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
-
-
- [`std::vector::clear()` 详细说明](#
std::vector::clear()详细说明) -
- [1. 核心功能](#1. 核心功能)
- [2. 对 size 和 capacity 的具体影响](#2. 对 size 和 capacity 的具体影响)
- [3. 代码示例](#3. 代码示例)
- [4. 补充说明](#4. 补充说明)
- 总结
- [`std::vector::clear()` 详细说明](#
-
你想了解C++标准库中std::vector的clear()成员函数的功能,并且重点关注这个函数是对size生效,还是对capacity生效。
std::vector::clear() 详细说明
1. 核心功能
clear()的作用是销毁vector中所有的元素 ,并将vector的元素数量(size)置为 0 ,但不会释放 vector 已经分配的内存空间(即不改变容量 capacity)。
2. 对 size 和 capacity 的具体影响
- 对 size 的影响 :
clear()会直接将vector的size()返回值变为 0,因为容器内的所有元素都被销毁了,当前有效元素的数量为 0。 - 对 capacity 的影响 :
clear()完全不影响capacity()的返回值,容器之前分配的内存空间会被保留,不会被释放。
3. 代码示例
下面的代码可以直观展示 clear() 对 size 和 capacity 的影响:
cpp
#include <iostream>
#include <vector>
int main() {
// 创建一个vector并添加元素
std::vector<int> vec = {1, 2, 3, 4, 5};
std::cout << "调用clear()前:" << std::endl;
std::cout << "size: " << vec.size() << std::endl; // 输出 5(当前元素数量)
std::cout << "capacity: " << vec.capacity() << std::endl; // 输出 5(分配的内存能容纳的元素数)
// 调用clear()清空元素
vec.clear();
std::cout << "\n调用clear()后:" << std::endl;
std::cout << "size: " << vec.size() << std::endl; // 输出 0(元素已清空)
std::cout << "capacity: " << vec.capacity() << std::endl; // 输出 5(内存仍保留)
// 补充:如果想同时清空元素并释放内存(改变capacity),可以用swap技巧
std::vector<int>().swap(vec); // 用空vector交换,释放原有内存
std::cout << "\nswap后:" << std::endl;
std::cout << "size: " << vec.size() << std::endl; // 输出 0
std::cout << "capacity: " << vec.capacity() << std::endl; // 输出 0(内存已释放)
return 0;
}
4. 补充说明
clear()只是销毁元素,不会调用deallocate释放内存,这样做的目的是为了性能优化:如果后续需要向vector中添加新元素,不需要重新分配内存,直接复用原有空间即可。- 如果你既想清空元素,又想释放内存(让
capacity也变为 0),可以使用示例中的swap技巧,或者在 C++11 及以上版本中使用shrink_to_fit()(注意:shrink_to_fit()是请求式的,编译器不一定会严格执行,但主流编译器都会支持)。
总结
std::vector::clear()仅对size生效,会将size置为 0,销毁所有元素;clear()对capacity无影响,不会释放已分配的内存空间;- 若需清空元素并释放内存,可使用
swap空vector或shrink_to_fit()(C++11+)。