【发布时间】:2014-02-17 11:29:32
【问题描述】:
我将填充整数列表与整数向量所花费的时间进行比较。
每个向量和列表都填充了 1000 万个随机整数,并且该实验重复 100 次以找到平均值。
令我惊讶的是,填充列表比填充整数向量快大约 100 倍。我希望填充整数向量要快得多,因为向量在内存中是连续的并且插入要快得多。
如何填充列表比填充向量快 100 倍而不是 10 倍。我确信我错过了一些导致这种情况的概念或想法
这是我用来生成结果的代码
#include <iostream>
#include <sstream>
#include <list>
#include <vector>
#include <ctime>
#include <time.h>
using namespace std;
int main()
{
list<int> mylist;
vector<int> myvector;
srand(time(NULL));
int num;
clock_t list_start;
clock_t list_end;
clock_t list_totaltime;
for (int i=0;i<100;i++)
{
list_start = clock();
for (int i = 0 ; i < 10000000 ; i++ ) // 10 million
{
num = rand() % 10000000 ;
mylist.push_back(num);
}
list_end = clock();
list_totaltime += difftime(list_end,list_start);
mylist.clear();
}
cout << list_totaltime/CLOCKS_PER_SEC/100;
cout <<" List is done ";
cout << endl
<< endl;
clock_t vector_start;
clock_t vector_end;
clock_t vector_totaltime;
for (int i=0;i<100;i++)
{
vector_start = clock();
for (int i = 0 ; i < 10000000 ; i++ ) // 10 million times
{
num = rand() % 10000000 ;
myvector.push_back(num);
}
vector_end = clock();
vector_totaltime += difftime(vector_end,vector_start);
myvector.clear();
}
cout << vector_totaltime/CLOCKS_PER_SEC/100;
cout << " Vector is done " ;
}
有人可以向我解释为什么会这样吗???
【问题讨论】:
-
你需要初始化
list_totaltime和vector_totaltime。提高编译器警告级别。 -
当列表大小增加时,不需要重新定位已经定位的内容,这与向量不同(由于连续性)。
-
它可以防止你的输出完全是垃圾。
-
你也有整数除法。所以,当我运行你的代码并修复初始化问题时,我得到了
0。 -
@juanchopanza 你将 list_totaltime 和 vector_totaltime 初始化为什么???
标签: c++ performance list vector