[C++]Vector的reserve函数

前段时间,看了公司几个前辈的代码,发现他们特别喜欢用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

猜你喜欢

转载自blog.csdn.net/qq_35037684/article/details/121405455