假设我们预先为容器添加了一部分元素,接着用clear将它们删除,容器内部分配的存储空间实际上不会减小,改变的只是能够访问的元素个数。如下所示:
std::vector<int> vec; for(int i=0;i<1000;i++) vec.push_back(i);
vec.clear(); std::cout<<vec.capacity()<<std::endl;
此时控制台会输出1066,很明显之前的存储空间没有变化。
如果我们想要删除不必要的存储空间,可以利用swap函数:
std::vector<int>(vec).swap(vec);
系统首先生成一个内容与vec一样,而存储空间最小的容器变量,然后调用swap将二者的存储空间交换。Bingo!
另外,swap技巧也可以用来将容器彻底清空(连同容器的存储空间)。
std::vector<int>().swap(vec);