154

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

4

2 回答 2

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

或者:

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

前者设置数组的实际大小——即,使其成为一个包含 20000 个指针的向量。后者将向量留空,但为 20000 个指针保留空间,因此您可以插入(最多)那么多指针,而无需重新分配。

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

于 2012-07-12T17:49:04.033 回答
19

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

vector<CustomClass *> content(20000);

或者

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

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

于 2012-07-12T17:48:50.210 回答