测试内容:
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 |