vector,數組,動態數組效率測試

對vector、數組、new創建的動態數組、預先reverse的vector測試代碼如下:

#include <iostream>
#include <vector>
#include <time.h>
#include <windows.h>

#define QueryFreAndCounter(m_fre,tt) QueryPerformanceFrequency(&m_fre);\
	QueryPerformanceCounter(&tt);
#define  Timecost(t2,t1,fre,tt1)\
	QueryPerformanceCounter(&t2);\
	tt1=(double)1000.0*(t2.QuadPart - t1.QuadPart) / fre.QuadPart;

using namespace std;
using namespace cv;
void main()
{
	//vector,數組,動態數組效率測試
	int t = 100,t1=100,t2=100,t3=100;
	int n = 200000;
	double TimeCost = 0;
	LARGE_INTEGER m_frequency = { 0 }, m_time1 = { 0 }, m_time2 = { 0 };
	QueryFreAndCounter(m_frequency, m_time1);
	while (t)
	{
		int a[200000];
		for (int i = 0; i < n;++i)
		{
			a[i] = i;
		}
		--t;
	}
	Timecost(m_time2, m_time1, m_frequency, TimeCost);
	printf("array cost %.3f ms!\n", TimeCost);

	QueryFreAndCounter(m_frequency, m_time1);
	while (t1)
	{
		vector<int> a;
		a.resize(n + 1);
		for (int i = 0; i < n; ++i)
		{
			a.push_back(i);
		}
		--t1;
	}
	Timecost(m_time2, m_time1, m_frequency, TimeCost);
	printf("reverse_vector cost %.3f ms!\n", TimeCost);

	QueryFreAndCounter(m_frequency, m_time1);
	while (t2)
	{
		int *a=new int[n+1];
		for (int i = 0; i < n; ++i)
		{
			a[i] = i;
		}
		delete[]a;
		--t2;
	}
	Timecost(m_time2, m_time1, m_frequency, TimeCost);
	printf("dynamic array cost %.3f ms!\n", TimeCost);

	QueryFreAndCounter(m_frequency, m_time1);
	while (t3)
	{
		vector<int> a;
		for (int i = 0; i < n; ++i)
		{
			a.push_back(i);
		}
		--t3;
	}
	Timecost(m_time2, m_time1, m_frequency, TimeCost);
	printf("vector cost %.3f ms!\n", TimeCost);
	cvWaitKey(0);
}

debug下結果
圖1
release下結果
圖2
總結,效率:數組>new創建的動態數組>vector>預先reverse的vector。理論上預先reverse的vector效率應該比vector高(參考鏈接中是這樣),但是結果並沒有,如果問題,歡迎討論~
參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章