У меня есть две программы со мной, обе выполняют точно такую же задачу. Они просто устанавливают логический массив/вектор в значение true. Программа, использующая вектор , занимает 27 секунд, тогда как программа с массивом с размером в 5 раз больше занимает менее 1 с. Я хотел бы узнать точную причину того, почему существует такая большая разница? Действительно ли векторы неэффективны?C++ Vector vs Array (Время)
Программа с использованием векторов
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;
int main(){
const int size = 2000;
time_t start, end;
time(&start);
vector<bool> v(size);
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
v[i] = true;
}
}
time(&end);
cout<<difftime(end, start)<<" seconds."<<endl;
}
Продолжительность - 27 секунд
Программа с использованием массива
#include <iostream>
#include <ctime>
using namespace std;
int main(){
const int size = 10000; // 5 times more size
time_t start, end;
time(&start);
bool v[size];
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
v[i] = true;
}
}
time(&end);
cout<<difftime(end, start)<<" seconds."<<endl;
}
Продолжительность - < 1 секунды
Platform - Visual Studio 2008 ОС - Windows Vista 32 бит SP 1 Процессор Intel (R) Pentium (R) Dual CPU T2370 @ 1.73GHz памяти (RAM) 1,00 GB
Благодаря
Амаре
std :: vector не является контейнером. Прочтите следующее: http://www.gotw.ca/publications/mill09.htm –
Важное примечание. Несмотря на то, что вы пришли к правильному выводу, вы не проводите правильного сравнения. Вы выполняете N^2 итерации самого внутреннего цикла (оператор 'v [i] = true'), но N равно 2000 в одном тесте и 10000 в другом, поэтому вы действительно делаете в 25 раз больше работы, а не 5 в разы больше, чем разница между «вектором» и простым массивом. Это на самом деле делает разницу еще более выраженной. –
@ user235022 Вы имели в виду 'v [j] = true;' вместо 'v [i] = true'? В противном случае для компилятора должно быть очень просто оптимизировать внутренний цикл, поскольку ваши действия не зависят от переменной цикла. – fiktor