我正在为我的 a 预先分配一些内存vector
数据成员。例子:
class A {
vector<string> t_Names;
public:
A () : t_Names(1000) {}
};
在某个时间点,如果t_Names.size()
equals 1000
,我打算增加尺寸100
。一旦达到1100
,将其增加100
等等。
我该选择哪一个vector::resize()
and vector::reserve()
?在这种场景下还有更好的选择吗?
Edit: 我对t_Names
。我估计大约是700
to 800
。然而在certain(很少)情况下,它可以增长超过1000
.
这两个函数做的事情截然不同!
The resize()方法(将参数传递给构造函数相当于)将向向量插入或删除适当数量的元素,以使其达到给定大小(它有可选的第二个参数来指定它们的值)。它将影响size()
,迭代将遍历所有这些元素,push_back 将在它们之后插入,您可以使用operator[]
.
The reserve()方法仅分配内存,但未初始化。它只影响capacity()
, but size()
将保持不变。对象没有任何价值,因为没有任何内容添加到向量中。如果您随后插入元素,则不会发生重新分配,因为它是提前完成的,但这是唯一的效果。
所以这取决于你想要什么。如果您想要一个包含 1000 个默认项目的数组,请使用resize()
。如果您想要一个要插入 1000 个项目的数组并希望避免多次分配,请使用reserve()
.
EDIT:高炉的评论让我再次阅读了这个问题并意识到,在你的情况下,正确的答案是不预先分配手动。只需根据需要在末尾插入元素即可。向量将根据需要自动重新分配并执行此操作more比提到的手动方式有效。唯一的情况是reserve()
当您对需要轻松提前获得的总大小进行合理精确的估计时,这是有意义的。
EDIT2:广告问题编辑:如果您有初步估计,那么reserve()
那个估计。如果结果还不够,就让向量来做它的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)