C++ list vector deque stack 大量数据 pushback 性能对比测试

测试内容:

std::list
std::vector
std::deque

在数据量较大的情况下pushback所需要的时间

#include <vector>
#include <list>
#include <deque>
#include <stack>
#include <Windows.h>

#include <time.h>
typedef WCHAR *OSSTR;

int main()
{
 std::list<OSSTR> l;
 std::vector<OSSTR> v;
 std::deque<OSSTR> d;
 std::stack<OSSTR> s;
 long i;
 OSSTR str = L"HHHHHH",t;
 long length = wcslen(str);
 clock_t c = clock();
 //l.resize(10000000);
 for (i = 0; i < 10000000; i++)
 {
 t = (OSSTR) calloc(2, length);
 wcscpy(t, str);
 l.push_front(t);
 }
 printf("list time=%lf\n", (double)(clock() - c) / CLOCKS_PER_SEC);
 c = clock();
 //v.resize(10000000);
 for (i = 0; i < 10000000; i++)
 {
 t = (OSSTR)calloc(2, length);
 wcscpy(t, str);
 v.push_back(t);
 }
 printf("vector time=%lf\n", (double)(clock() - c) / CLOCKS_PER_SEC);
 c = clock();
 //d.resize(10000000);
 for (i = 0; i < 10000000; i++)
 {
 t = (OSSTR)calloc(2, length);
 wcscpy(t, str);
 d.push_back(t);
 }
 printf("deque time=%lf\n", (double)(clock() - c) / CLOCKS_PER_SEC);

 c = clock();
 //s.resize(10000000);
 for (i = 0; i < 10000000; i++)
 {
  t = (myStrPtr)calloc(2, length);
  wcscpy(t, str);
  s.push(t);
 }
 printf("stack time=%lf\n", (double)(clock() - c) / CLOCKS_PER_SEC);
 return 0;
}

输出

注:MSVC下stack是通过deque实现的

list 1.513000
vector 1.055000
deque 1.319000
stack 1.326000