“vector 的 clear 不影响 capacity , 你应该 swap 一个空的 vector。”
当vector、string大量插入数据后,即使删除了大量数据(或者全部都删除,即clear) 并没有改变容器的容量(capacity),所以仍然会占用着内存。 为了避免这种情况,我们应该想办法改变容器的容量使之尽可能小的符合当前 数据所需(shrink to fit)
《Effective STL》给出的解决方案是:
vector<type>
v; //....
这里添加许多元素给v//....
这里删除v中的许多元素vector<type>(v).swap(v);//此时v的容量已经尽可能的符合其当前包含的元素数量
//对于string则可能像下面这样string(s).swap(s);即先创建一个临时拷贝与原先的vector一致,值得注意的是,此时的拷贝 其容量是尽可能小的符合所需数据的。紧接着将该拷贝与原先的vector v进行 交换。好了此时,执行交换后,临时变量会被销毁,内存得到释放。此时的v即为原先 的临时拷贝,而交换后的临时拷贝则为容量非常大的vector(不过已经被销毁)
本文深入探讨了在使用Vector和String容器时,如何通过swap方法来优化容器容量,使其更加符合当前数据需求,从而节省内存资源。
2243

被折叠的 条评论
为什么被折叠?



