前段时间,看了公司几个前辈的代码,发现他们特别喜欢用Vector,而且总喜欢定义之后直接reserve一定的空间。在我的印象中reserve只是保留一定的空间而已好像没有多大的用处,然后就查了一下,发现reserve好像会直接去分配内存空间(虽然不会改变size)。
于是写了一个小程序验证一下,结果发现,当数据量比较大的时候用reserve可以加快push的速度,于是又Get一个知识点。
下面给出测试代码和结果
#include<fstream>
#include <vector>
#include <ctime>
#include <windows.h>
#include <WinBase.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int Loop = 10000000;
vector<int> bStrVec;
vector<int> dStrVec;
vector<int> 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 %d\n", tStrVec.size());
printf("the vec size is %d\n", bStrVec.size());
printf("reserve space: %lf\n", bEnd - bStart);
printf("reserve push time: %lf\n",bEnd1-bEnd);
printf("just push time: %lf\n", bEnd2 - bEnd1);
system("pause");
return 0;
}
结果:
其中,GetTickCount函数
函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD,获取毫秒级数目 。
转载自:https://blog.csdn.net/qq_36251561/article/details/85317666