Ho qui due programmi con me, entrambi stanno facendo esattamente lo stesso compito. Stanno semplicemente impostando un array/vettore booleano sul valore true. Il programma che utilizza il vettore impiega 27 secondi per essere eseguito mentre il programma che include una matrice con una dimensione 5 volte maggiore richiede meno di 1 s. Mi piacerebbe conoscere la ragione esatta del perché c'è una differenza così grande? I vettori sono davvero inefficienti?C++ Vector vs Array (Time)
programma utilizzando vettori
#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;
}
Runtime - 27 secondi
Programma utilizzando Array
#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;
}
Runtime - < 1 secondo
piattaforma - Visual Studio 2008 OS - Windows Vista 32 bit SP 1 processore Intel (R) Pentium (R) dual T2370 CPU @ 1.73GHz Memoria (RAM) 1.00 GB
Grazie
Amare
std :: vector non è un contenitore. Leggi questo: http://www.gotw.ca/publications/mill09.htm –
Nota importante: anche se si arriva alla conclusione corretta, non si sta eseguendo un confronto adeguato. Esegui N^2 iterazioni del ciclo più interno (l'istruzione 'v [i] = true'), ma N è 2000 in un test e 10000 nell'altro, quindi stai facendo davvero 25 volte tanto lavoro, non 5 volte tanto, a parte la differenza tra un 'vector' e un array semplice. Ciò rende la differenza ancora più pronunciata. –
@ user235022 Hai inteso 'v [j] = true;' invece di 'v [i] = true'? Altrimenti dovrebbe essere molto semplice per il compilatore ottimizzare il ciclo interno, dal momento che le tue azioni non dipendono dalla variabile del ciclo. – fiktor