Jaki jest najbardziej skuteczny sposób inicjowania wektora 3D?

Mam wektor ciągów 3D w C ++:

vector<vector<vector<string>>> some_vector

Próbuję znaleźć szybką metodę przydzielania pamięci.

Próbowałem go zdefiniować za pomocą dwóch różnych metod:

#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;
}

Spodziewam się, że pierwsza metoda (vec1) może być szybsza niż druga (vec2).

Okazało się jednak, że pierwsza metoda jest znacznie wolniejsza niż druga. W mojej maszynie pierwsza metoda wykorzystała 0,245 sekundy, podczas gdy druga metoda wykorzystała 0,152 sekundy.

Ponadto, gdy przełączam typ danych na int, pierwszy z nich zajął 0,058 sekundy, a drugi zajął 0,004.

Czy mogę wiedzieć, co powoduje taką różnicę? Czy jest lepszy sposób na przydzielenie pamięci dla wektora 3D?

Z góry bardzo dziękuję.

questionAnswers(4)

yourAnswerToTheQuestion