@mrbbfst

Как инициализировать массив массивов массивов?

double ***array;

Как его правильно инициализировать
Допустим если нужно что бы было два массива массивов. И в каждом из них по 3 массива из 4х элементов.
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
@mrbbfst Автор вопроса
Вот что получилось
void neural_network_lib::Weight::fSetMemWeights()	//+
{
	this->d->pppdWeights = new double**[this->d->iQuantLayer];
	for (int i = 0; i < this->d->iQuantLayer; i++)	
		this->d->pppdWeights[i] = new double*[this->d->piQuantNInLayer[i]];
	for (int i = 0; i < this->d->iQuantLayer; i++)
		for (int j = 0; j < this->d->piQuantNInLayer[i + 1]; j++)
			this->d->pppdWeights[i][j] = new double[this->d->piQuantNInLayer[i + 1]];
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Начнём с того, что double ***array -- не массив массивов массивов, а указатель на указатель на указатель на double. Массив массивов массивов -- это double array[A][B][C]. Инициализируется он как обычно:
double array [A][B][C] = {
    {
        {
            1., 2., 3., ...
        }, {
            ...
        }
    }, {
        ...
    }
};
Ответ написан
Комментировать
Adamos
@Adamos
Если накладные расходы некритичны - вложенный вектор.
Если хочется оптимально - класс с двумя функциями set / get и конструктором, в который передаются размеры. Внутри хранятся размеры и плоский динамический массив, номер ячейки в котором элементарно вычисляется при каждом обращении.
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Хипстерский вариант
#include <iostream>
#include <array>
#include <vector>

template <typename V, typename... T>
constexpr auto make_array(V &&v, T&&... t) -> std::array < V , sizeof...(T) + 1 >
{
    return {{v, std::forward<T>(t)... }};
}

int main()
{
    auto array = make_array(
        make_array(make_array(1.,2.,3.,4.),make_array(5.,6.,7.,8.),make_array(9.,10.,11.,12.)),
        make_array(make_array(14.,15.,16.,17.),make_array(18.,19.,20.,21.),make_array(22.,23.,24.,25.))
    );
    
    for(auto && v: array[0][2]){
        std::cout << v << ',';
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы