Tôi có một vector chuỗi 3D trong C++:Cách hiệu quả nhất để khởi tạo một vector 3D là gì?
vector<vector<vector<string>>> some_vector
Rằng tôi đang cố gắng là để tìm một phương pháp nhanh để cấp phát bộ nhớ cho nó.
Tôi cố gắng để xác định nó bằng hai phương pháp khác nhau như sau:
#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;
}
Tôi hy vọng rằng phương pháp đầu tiên (vec1) có thể là nhanh hơn so với một trong 2 (vec2).
Nhưng hóa ra là phương pháp thứ nhất chậm hơn nhiều so với lần thứ 2. Trên máy tính của tôi, phương pháp thứ nhất sử dụng 0.245 giây, trong khi phương pháp thứ 2 sử dụng 0.152 giây.
Hơn nữa, khi tôi chuyển kiểu dữ liệu thành int, số thứ nhất mất 0,058 giây và số thứ hai mất 0,004.
Tôi có thể biết nguyên nhân gây ra sự khác biệt như thế nào không? Và có cách nào tốt hơn để phân bổ bộ nhớ cho một vector 3D?
Rất cám ơn trước.
Bạn đang sử dụng một xây dựng tối ưu? – juanchopanza
Bạn đang làm gì đòi hỏi hiệu suất cao như vậy để phân bổ cấu trúc dữ liệu của bạn? Nếu bạn cần một cái gì đó siêu nhanh, ba chiều 'std :: vector <>' s có thể không phải là thứ bạn đang tìm kiếm. –
Nếu kích thước là không đổi, thì tại sao không 'std :: mảng, DIM2>, DIM1>'? –
dchhetri