【发布时间】:2014-02-04 01:34:48
【问题描述】:
我阅读了this 很好的实验比较,特别是在vector 和deque 容器上调用insert() 的性能。该特定实验(实验 4)的结果是 deque 非常适合此操作。
我使用我编写的一个简短的排序函数实现了我自己的测试,我应该注意它使用了[] 运算符以及其他成员函数,并发现了截然不同的结果。例如,对于插入 100,000 个元素,vector 需要 24.88 秒,而deque 需要 374.35 秒。
我该如何解释呢?我想这与我的排序功能有关,但想了解详细信息!
我正在使用没有优化的 g++ 4.6。
这是程序:
#include <iostream>
#include <vector>
#include <deque>
#include <cstdlib>
#include <ctime>
using namespace std;
size_t InsertionIndex(vector<double>& vec, double toInsert) {
for (size_t i = 0; i < vec.size(); ++i)
if (toInsert < vec[i])
return i;
return vec.size(); // return last index+1 if toInsert is largest yet
}
size_t InsertionIndex(deque<double>& deq, double toInsert) {
for (size_t i = 0; i < deq.size(); ++i)
if (toInsert < deq[i])
return i;
return deq.size(); // return last index+1 if toInsert is largest yet
}
int main() {
vector<double> vec;
deque<double> deq;
size_t N = 100000;
clock_t tic = clock();
for(int i = 0; i < N; ++i) {
double val = rand();
vec.insert(vec.begin() + InsertionIndex(vec, val), val);
// deq.insert(deq.begin() + InsertionIndex(deq, val), val);
}
float total = (float)(clock() - tic) / CLOCKS_PER_SEC;
cout << total << endl;
}
【问题讨论】:
-
告诉我们:1) 您使用的是什么编译器,以及 2) 您是否正在测试优化的构建。
-
刚刚补充说我正在使用没有优化的 g++,但我不确定如何找出我正在使用的 g++ 版本。
-
酷,谢谢。
-
vector of double 可能会更快,但如果类类型很大,deque 肯定会更快
标签: c++ vector stl containers deque