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

Dam*_*mir 115 c++ stl

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

Jer*_*fin 162

std::vector<CustomClass *> whatever(20000);
Run Code Online (Sandbox Code Playgroud)

要么:

std::vector<CustomClass *> whatever;
whatever.reserve(20000);
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Loggie:我怀疑效率会有什么不同.大多数情况下它会改变你使用它的方式 - 对于前者,你只需要解决指针,所以就像`what [10000] = somepointer;`,后者要求你"push_back"你添加的每个指针.至少如果你习惯于"矢量",后者可能更简单,更自然. (3认同)

小智 13

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

vector<CustomClass *> content(20000);
Run Code Online (Sandbox Code Playgroud)

要么

vector<CustomClass *> content;
...
content.reserve(20000);
Run Code Online (Sandbox Code Playgroud)

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