今天在看一位老师的代码时,看到了下面的程序:
vector <int>().swap(chIndiv1.v_chromosome);
vector <int>().swap(chIndiv2.v_chromosome);
很迷惑,因为之前知道swap是用来交换容量中的元素的,那么现在这里的swap用法是什么呢?抱着继续好好学习的态度,查找了一些资料后,发现原来swap还用两种用法,特此整理一下:
(1)用法1:释放内存
vector<double>v;
vector<double>().swap(v);
//也可以是v.swap(vector<double>());
(2)用法二:修整容器的空间
vector<int>(vec).swap(vec); // 或者 ivec.swap(vector<int>(ivec));
想到这里,我记得还有一个clear函数是用来释放内存的,那么两者有什么区别呢?
在https://blog.csdn.net/tpnndhqc/article/details/51074781
一文中提到,clear函数并不能完全保证内存回收,并不是所有的STL容器的clear成员函数的行为都和vector一样。
事实上,其他容器的clear成员函数都会释放其内存。