【发布时间】:2014-02-14 18:24:32
【问题描述】:
我使用下面的代码来比较 std::list 和 std::forward_list
#include <iostream>
#include <list>
#include <forward_list>
#include <windows.h>
int main()
{
LARGE_INTEGER start_;
LARGE_INTEGER end_;
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
std::list<long long> list;
QueryPerformanceCounter(&start_);
for(long long i=0;i<50000000;i++)
list.push_front(i);
QueryPerformanceCounter(&end_);
std::cout<< (end_.QuadPart - start_.QuadPart) / (freq.QuadPart / 1000) <<"\n";
cin.get();
}
我用 forward_list 更改了列表。
并测量两者的时间和大小
结果:
//long long
// size time
//forward list 1157.3 2360
//list 1157.3 2450
我也对这段代码做同样的事情:
int main()
{
LARGE_INTEGER start_;
LARGE_INTEGER end_;
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
std::list<char> list;
QueryPerformanceCounter(&start_);
for(long long i=0;i<50000000;i++)
list.push_front('a');
QueryPerformanceCounter(&end_);
std::cout<< (end_.QuadPart - start_.QuadPart) / (freq.QuadPart / 1000 )<<"\n";
std::cin.get();
}
结果:
//char
// size time
//forward list 773 2185
//list 1157 2400
问题是为什么使用 std::forward_list whith char 比使用 long long 比使用它要好得多 std::list 。
我知道速度几乎相同,但是容器的大小呢?
//long long
// size(mb) time
//forward list 1157.3 2360
//list 1157.3 2450
//char
// size(mb) time
//forward list 773 2185
//list 1157 2400
【问题讨论】:
-
免费图表色情:docs.google.com/spreadsheets/d/…(在我的机器上收集的结果)。您仍然认为其中任何一个之间存在显着差异吗?
标签: c++ list optimization c++11 forward-list