C# · 12月 19, 2021

[C++]Vector的reserve函数小探究

前段时间,看了公司几个前辈的代码,发现他们特别喜欢用Vector,而且总喜欢定义之后直接reserve一定的空间。在我的印象中reserve只是保留一定的空间而已好像没有多大的用处,然后就查了一下,发现reserve好像会直接去分配内存空间(虽然不会改变size)。

于是写了一个小程序验证一下,结果发现,当数据量比较大的时候用reserve可以加快push的速度,于是又Get一个知识点。

下面给出测试代码和结果

#include

#include

#include

#include

#include

using namespace std;

int _tmain(int argc,_TCHAR* argv[])

{

int Loop = 10000000;

vector bStrVec;

vector dStrVec;

vector tStrVec;

tStrVec.reserve(Loop);

double bStart = (double)GetTickCount();

bStrVec.reserve(Loop);

double bEnd = (double)GetTickCount();

for (int i = 0; i < Loop;i++)

{

bStrVec.push_back(i);

}

double bEnd1 = (double)GetTickCount();

for (int j = 0; j < Loop;j++)

{

dStrVec.push_back(j);

}

double bEnd2 = (double)GetTickCount();

printf(“t vec size is %dn”,tStrVec.size());

printf(“the vec size is %dn”,bStrVec.size());

printf(“reserve space: %lfn”,bEnd – bStart);

printf(“reserve push time: %lfn”,bEnd1-bEnd);

printf(“just push time: %lfn”,bEnd2 – bEnd1);

system(“pause”);

return 0;

}

结果如下

@H_419_86@