我正在將數據收集到一個4D數組中(這是大部分代碼已經實現了),並且我正在記錄數據(即將有多個4D數組)。在矢量中存儲4D數組?
四維陣列的總大小是浮筒的8x2x8x150即float data[8][2][8][150]
欲能夠每個後續傳入四維陣列存儲到用於存儲/處理的載體後。
我明白,雖然C++中的數組不能按原樣存儲在向量中。我怎樣才能輕鬆地將這些數據存儲一段時間(即不是一個固定的向量大小)?請記住,這是一個相當大的數據集(〜每四維陣列38KB)
我正在將數據收集到一個4D數組中(這是大部分代碼已經實現了),並且我正在記錄數據(即將有多個4D數組)。在矢量中存儲4D數組?
四維陣列的總大小是浮筒的8x2x8x150即float data[8][2][8][150]
欲能夠每個後續傳入四維陣列存儲到用於存儲/處理的載體後。
我明白,雖然C++中的數組不能按原樣存儲在向量中。我怎樣才能輕鬆地將這些數據存儲一段時間(即不是一個固定的向量大小)?請記住,這是一個相當大的數據集(〜每四維陣列38KB)
訪問您可以創建一個輔助類將數據存儲在std::vector
中,但提供了4D陣列的接口。
struct My4DArray
{
My4DArray(int d1, int d2, int d3, int d4) :
d1(d1), d2(d2), d3(d3), d4(d4), data(d1*d2*d3*d4) {}
float& at(int i1, int i2, int i3, int i4)
{
return data[getIndex(i1, i2, i3, i4)];
}
int getIndex(int i1, int i2, int i3, int i4)
{
assert(i1 >= 0 && i1 < d1);
assert(i2 >= 0 && i2 < d2);
assert(i3 >= 0 && i3 < d3);
assert(i4 >= 0 && i4 < d4);
// ??? Need to verify the formula.
return (((i1*d2 + i2)*d3 + i3)*d4 + i4);
}
int d1;
int d2;
int d3;
int d4;
std::vector<float> data;
};
雖然我們沒有理由需要創建一個新的類, – VermillionAzure
@VermillionAzure,這比處理一個一維向量索引的細節要好得多。 –
@Sipty,我想我是對的。看看這個:http://ideone.com/ATyAyp。 –
你可以存儲它19200元的一維數組,
array[i*2400 + j*1200 + k*150 + l] // array[i,j,k,l]
你可以定義一個別名來定義的一段時間內具有多層面幾乎與C風格的數組一樣方便的std::array
:
template<typename Type, std::size_t N, std::size_t... Sizes>
struct multi_array {
using type = std::array<typename multi_array<Type, Sizes...>::type, N>;
};
template<typename Type, std::size_t N>
struct multi_array<Type, N> {
using type = std::array<Type, N>;
};
template<typename Type, std::size_t... Sizes>
using multi_array_t = typename multi_array<Type, Sizes...>::type;
,然後,因爲std::array
處於std::vector
可存儲,只使用所得到的數組:
using my_array = multi_array_t<int, 2, 3>;
my_array arr1 {{
{{1, 2, 3}},
{{4, 5, 6}}
}};
my_array arr2 {{
{{7, 8, 9}},
{{10, 11, 12}}
}};
std::vector<my_array> vector {arr1, arr2};
assert(vector[0][0][1] == 2);
assert(vector[1][1][2] == 12);
有趣的問題。我想你可能會對Pramod Gupta在今年的cppcon上的談話感興趣C++ Multi-dimensional Arrays。
基本上,用他orca_array庫(僅標頭,MIT許可證),你應該能夠做這樣的事情:
#inclue <vector>
#include "orca_array.hpp"
std::vector<orca_array::array4d<double>> my_vector_of_4d_arrays;
要麼你正確的元素手動存儲所有信息的載體和索引,或者你使用'boost :: multi_array'這樣的東西' – sbabbi