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之后数组内存都变为未使用):
#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;
}