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

baa*_*h05 5 c++ memory stl resize vector

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

 if(count + 1 > m_listItems.capacity())
     m_listItems.reserve(count + 100);
Run Code Online (Sandbox Code Playgroud)

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

m_listItems.clear();
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*itb 20

vector<Item>(m_listItems).swap(m_listItems);
Run Code Online (Sandbox Code Playgroud)

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

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

vector<Item>().swap(m_listItems);
Run Code Online (Sandbox Code Playgroud)

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

  • 值得指出的是,虽然swap()非常便宜,但在第一种情况下构造m_listItems的临时副本将需要复制向量中的每个元素.因此,尽管完全清除矢量(将容量设置为0)很便宜.否则缩小它不是. (2认同)