Was ist der effizienteste Weg, um einen 3D-Vektor zu initialisieren?

Ich habe einen 3D-String-Vektor in C ++:

vector<vector<vector<string>>> some_vector

Das, was ich versuche, ist, eine schnelle Methode zu finden, um Speicher dafür zuzuweisen.

Ich habe versucht, es mit zwei verschiedenen Methoden zu definieren:

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

Ich gehe davon aus, dass die erste Methode (vec1) schneller sein könnte als die zweite (vec2).

Es stellte sich jedoch heraus, dass die erste Methode viel langsamer ist als die zweite. Auf meinem Computer wurden für die erste Methode 0,245 Sekunden und für die zweite Methode 0,152 Sekunden verwendet.

Wenn ich den Datentyp auf int ändere, dauert der erste 0,058 Sekunden und der zweite 0,004.

Darf ich wissen, was solchen Unterschied verursacht? Und gibt es eine bessere Möglichkeit, einem 3D-Vektor Speicher zuzuweisen?

Vielen Dank im Voraus.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage