vector中删除元素后,如何有效的释放无效元素的内存

.erase()只是删除了元素内容,并不能改变容量大小;

举例:

35 void testvector()
36 {
38     vector v;
39     v.push_back(1);
40     v.push_back(2);
41     cout << "v size = " << v.size() << " v capacity = " << v.capacity()  << endl;
42     v.erase(v.begin());
43     cout << "v size = " << v.size() << " v capacity = " << v.capacity()  << endl;
44     vector(v).swap(v); // 清除v而且最小化它的容量
45     cout << "v size = " << v.size() << " v capacity = " << v.capacity()  << endl;
47 }

结果如下:
[hfx@didkey1 bin]$ ./test
v size = 2 v capacity = 2
v size = 1 v capacity = 2
v size = 1 v capacity = 1

.clear()函数,只能清空内容,不能改变容量大小
c. vector容器删除不自动释放内存,那么它存在内存泄露???不是的,vector在析构函数的时候,对内存进行了释放。
d. 如果要想在删除内容的同时释放内存,那么你可以选择deque容器。
e. 关于vector:
vector相当于c++中的数组,数组在初始化的时候也需要给它一个数组空间大小,vector申请的时候将预留一个空间,比如10,在元素超过10的时候,vector自动将大小
扩大到两倍,并且将元素拷贝过去。

用法举例:
 vector(v).swap(v);将v的内存空洞清除
 vector().swap(v);清空vec

 
 
原文地址:https://www.cnblogs.com/mmziscoming/p/5806922.html