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ę.