хорошо ... vector<vector>
действительно ли это хорошо? вы думаете о матрице, строки которой могут иметь независимую длину? Если ответ «нет», а затем рассмотреть идею, что все, что вам нужно, это обычный вектор, размер которого является произведением 5 размеров, и элементы которого расположены в
size_t at(size_t a, size_t b, size_t c, size_t d, size_t e, size_t A, size_t B, size_t C, size_t D, size_t E)
{ return e+d*E+c*D*E+b*C*D*E+a*B*C*D*E; }
(примечание: заглавные буквы размеры).
Вы можете легко обобщить это независимо от количества измерений с помощью varadics:
template<class... I>
size_t at(size_t r, size_t R, size_t c, size_t C, I... i)
{ return size_at(r*C+c,i...); }
size_t at(size_t c, size_t C)
{ return c; }
И вы также можете встроить все это в повторяющийся класс
template<class T, size_t Rank>
class grid
{
grid<T,Rank-1> m; size_t C;
public:
template<class... I>
grid(size_t r, size_t c, I... i) :m(r*c,i...) :C(c) {}
template<class... I>
T& operator()(size_t r, size_t c, I... i)
{ return m(r*C+c,i...); }
template<class... I>
const T& operator()(size_t r, size_t c, I... i) const
{ return m(r*C+c,i...); }
};
template<class T>
class grid<T,1>
{
std::vector<T> m;
public:
explicit grid(size_t n) :m(n) {}
T& operator()(size_t i) { return m[i]; }
const T& operator()(size_t i) const { return m[i]; }
};
Вы можете просто объявить grid<5> a(3,2,4,5,3);
и получить доступ к своим элементам как a(x,y,z,w,t);
любой x в 0..2, y в 0..1, z в 0..3 w в 0..4 и t в 0..2;
Я создал собственный класс для n-мерных массивов, которые инициализируются известными размерами для каждого вспомогательного массива. http://stackoverflow.com/questions/26665096/multidimensional-array-operator-overloading/26665964#26665964 – BWG
a) имеет ли массив фиксированный размер? б) у вас есть только небольшой объем данных? Я спросил об этом, как вектор в векторе в ... просто чувствует ... ну, неправильно. –
a) Нет, но с точки зрения теста да b) данные представляют изображение, поэтому могут быть довольно большими. Размер массива изменится, изменив разрешение изображения. – PinkTurtle