如何设置标准: : 向量的初始大小?

我有一个 vector<CustomClass*>,我把很多项目的矢量,我需要快速访问,所以我不使用列表。如何设置矢量的初始大小(例如为20000位,以避免在插入新内容时复制) ?

354791 次浏览

您需要使用 reserve 函数来设置初始分配的大小,或者在初始构造函数中进行设置。

vector<CustomClass *> content(20000);

或者

vector<CustomClass *> content;
...
content.reserve(20000);

当您使用 reserve()元素时,vector将为(至少?)分配足够的空间那么多元素。这些元素在 vector中不存在,但是内存已经可以使用了。这样可能会加快 push_back()的速度,因为内存已经分配好了。

std::vector<CustomClass *> whatever(20000);

或:

std::vector<CustomClass *> whatever;
whatever.reserve(20000);

前者设置数组的实际大小——也就是说,使其成为20000个指针的向量。后者使向量为空,但为20000个指针保留了空间,因此您可以插入(最多)这么多指针,而不必重新分配。

至少根据我的经验,这两种方法中的任何一种在性能上产生巨大差异都是相当不寻常的——但是在某些情况下,它们都会影响正确性。特别是,只要没有重新分配发生,向量中的迭代器保证仍然有效,并且一旦设置了大小/保留空间,只要不增加超出这个范围的大小,就保证不会发生任何重新分配。