STL—vector
1.vector
vector相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。
2.方法
size()
当前容器中元素的个数。
capacity()
当前容器的容量,包括已用和可用的大小。
resize(Container::size_type n)
强制把容器改为n个元素。该方法调用后,再调用size()会返回n。如果n小于当前大小,容器尾部的元素会被销毁。如果n大于当前大小,新默认构造的元素会添加到容器尾部,如果n大于当前容量,在元素加入之前会发生重新分配。
reserve(Container::size_type n)
强制容器把它的容量改为至少n,如果n小于当前容量,vector忽略它。这个用来减少内存重新分配。
3.问题
问题1:如何释放vector的内存?
clear()函数并不能释放vector的内存,如果vector的元素是对象,则调用clear()会调用对象的析构函数,如果是指针则需要手动调用delete。clear会把数组个数清零,即size() == 0,但是capacity()的值不变,数组本身内存并没有释放。正确释放数组内存的方式是使用swap方法或者C++11推出的shrink_to_fit方法(shrink_to_fit的意思是释放未使用的数组内存,clear之后数组内存都变为未使用):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include<iostream> #include<vector> #include <stdio.h> #include <stdlib.h> using namespace std; int main() { vector< int > v; v.push_back(1); v.push_back(2); v.push_back(3); cout << "size:" << v.size() << endl; cout << "capacity:" << v.capacity() << endl; //vector<int>().swap(v); v.clear(); v.shrink_to_fit(); cout << "after shrink_to_fit size:" << v.size() << endl; cout << "after shrink_to_fit capacity:" << v.capacity() << endl; return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步