利用swap技巧去除容器多余的容量

假设我们预先为容器添加了一部分元素,接着用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);

  

上一篇:Java 内存级默认DNS缓存


下一篇:[CPP - STL] swap技巧