Tengo aquí dos programas conmigo, ambos están haciendo exactamente la misma tarea. Solo están configurando una matriz/vector booleano para el valor verdadero. El programa que utiliza el vector tarda 27 segundos en ejecutarse, mientras que el programa que implica una matriz con un tamaño 5 veces mayor tarda menos de 1 s. Me gustaría saber la razón exacta de por qué hay una gran diferencia. ¿Son realmente ineficientes los vectores ?C++ Vector vs Array (Time)
programa usando vectores
#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 segundos
Programa utiliza matriz
#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 segundo
Plataforma - Visual Studio 2008 OS - Windows Vista 32 bit SP 1 procesador Intel (R) Pentium (R) Dual CPU T2370 @ 1.73GHz Memoria (RAM) 1,00 GB
Gracias
Amare
std :: vector no es un contenedor. Lea esto: http://www.gotw.ca/publications/mill09.htm –
Nota importante: aunque llegue a la conclusión correcta, no está realizando una comparación adecuada. Realiza N^2 iteraciones del ciclo más interno (la instrucción 'v [i] = true'), pero N es 2000 en una prueba y 10000 en la otra, por lo que realmente está haciendo 25 veces más trabajo, no 5 veces más, aparte de la diferencia entre un 'vector' y una matriz simple. Esto realmente hace la diferencia aún más pronunciada. –
@ user235022 ¿Ha querido decir 'v [j] = verdadero;' en lugar de 'v [i] = verdadero'? De lo contrario, el compilador debería ser muy simple para optimizar el bucle interno, ya que sus acciones no dependen de la variable de bucle. – fiktor