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