我有一个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增加超出该范围的大小.
小智 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()
因为内存已经分配.