本文介绍了更改C ++向量的保留内存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有1000个节点的向量

I have a vector with 1000 "nodes"

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

问题是我也要清除它,当我要重新填充它。

The problem is I also clear it out when I'm about to refill it.

m_listItems.clear();

容量不变。
我使用了resize(1);但这似乎没有改变容量。
那么如何更改储备?

The capacity doesn't change. I've used the resize(1); but that doesn't seem to alter the capacity. So how does one change the reserve?

推荐答案

vector<Item>(m_listItems).swap(m_listItems);

将再次收缩 m_listItems :(Herb Sutter)

will shrink m_listItems again: http://www.gotw.ca/gotw/054.htm (Herb Sutter)

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

If you want to clear it anyway, swap with an empty vector:

vector<Item>().swap(m_listItems);

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

which of course is way more efficient. (Note that swapping vectors basicially means just swapping two pointers. Nothing really time consuming going on)

这篇关于更改C ++向量的保留内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 11:45