Qual é a maneira mais eficiente de inicializar um vetor 3D?
Eu tenho um vetor de seqüência 3D em C ++:
vector<vector<vector<string>>> some_vector
O que estou tentando é encontrar um método rápido para alocar memória para ele.
Eu tentei defini-lo com dois métodos diferentes, como segue:
#include<vector>
#include<iostream>
#include<ctime>
using namespace std;
#define DIM1 100
#define DIM2 9
#define DIM3 120
int main()
{
clock_t t1_start = clock();
vector<vector<vector<string>>> vec1(DIM1, vector<vector<string>>(DIM2, vector<string>(DIM3)));
clock_t t1_end = clock();
double diff1 = (t1_end - t1_start) / double(CLOCKS_PER_SEC);
clock_t t2_start = clock();
vector<vector<vector<string>>> vec2;
vec2.resize(DIM1);
for(int i = 0; i < DIM1; i++)
{
vec2[i].resize(DIM2);
for(int j = 0; j < DIM2; j++)
vec2[i][j].resize(DIM3);
}
clock_t t2_end = clock();
double diff2 = (t2_end - t2_start) / double(CLOCKS_PER_SEC);
cout<<"1st definition used time: "<<diff1<<"s"<<endl;
cout<<"2nd definition used time: "<<diff2<<"s"<<endl;
}
Espero que o primeiro método (vec1) possa ser mais rápido que o segundo (vec2).
Mas descobriu-se que o primeiro método é muito mais lento que o segundo. Na minha máquina, o primeiro método usou 0,245 segundos, enquanto o segundo método usou 0,152 segundo.
Além disso, quando eu mudo o tipo de dados para int, o primeiro tomou 0,058 segundo, e o segundo levou 0,004.
Posso saber o que causa essa diferença? E há melhor maneira de alocar memória para um vetor 3D?
Muito obrigado antecipadamente.