如何设置std :: vector的初始大小?

时间:2012-07-12 17:45:30

标签: c++ stl

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

2 个答案:

答案 0 :(得分:145)

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

或:

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

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

至少根据我的经验,这些中的任何一个在性能上产生巨大差异是相当不寻常的 - 但是在某些情况下这两者都会影响正确性。特别是,只要不进行重新分配,向量中的迭代器就会保证有效,一旦你设置了大小/保留空间,你就可以保证只要你没有重新分配就不会有任何重新分配。 t增加尺寸。

答案 1 :(得分:11)

您需要使用保留函数来设置初始分配的大小,或者在初始构造函数中执行此操作。

vector<CustomClass *> content(20000);

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

当你reserve()个元素时,vector将为(至少?)多个元素分配足够的空间。 vector中不存在这些元素,但可以使用内存。这可能会加快push_back(),因为内存已经分配。