Я прочитал хороший эксперимент, сравнивающий, в частности, производительность вызова insert()
как на vector
, так и на контейнере deque
. Результатом этого конкретного эксперимента (эксперимент 4) было то, что deque
значительно превосходит эту операцию.Vector vs 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) Проверяете ли вы оптимизированную сборку или нет. – PaulMcKenzie
Просто добавил, что я использую g ++ без оптимизации, но я не уверен, как узнать, какую версию g ++ я использую. – bcf
g ++ -dumpversion – Brian