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.

questionAnswers(4)

yourAnswerToTheQuestion