当前位置:  开发笔记 > 编程语言 > 正文

更改C++向量的保留内存

如何解决《更改C++向量的保留内存》经验,为你挑选了1个好方法。

我有一个1000"节点"的矢量

 if(count + 1 > m_listItems.capacity())
     m_listItems.reserve(count + 100);

问题是,当我要重新填充它时,我也清楚了.

m_listItems.clear();

容量不会改变.我用过调整大小(1); 但这似乎并没有改变容量.那么如何改变储备呢?



1> Johannes Sch..:
vector(m_listItems).swap(m_listItems);

m_listItems再次缩小:http://www.gotw.ca/gotw/054.htm(Herb Sutter)

如果你想要清除它,用空向量交换:

vector().swap(m_listItems);

这当然更有效率.(请注意,交换向量基本上意味着只交换两个指针.没有什么真正耗费时间)


值得指出的是,虽然swap()非常便宜,但在第一种情况下构造m_listItems的临时副本将需要复制向量中的每个元素.因此,尽管完全清除矢量(将容量设置为0)很便宜.否则缩小它不是.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有