提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- `std::vector::clear()` 详细说明
- 1. 核心功能
- 2. 对 size 和 capacity 的具体影响
- 3. 代码示例
- 4. 补充说明
- 总结
你想了解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的影响:
#include<iostream>#include<vector>intmain(){// 创建一个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;// 输出 0std::cout<<"capacity: "<<vec.capacity()<<std::endl;// 输出 0(内存已释放)return0;}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+)。