Создание трехмерного массива в C ++ с использованием переданных параметров

У меня есть функция, которая принимает пустота * буфер параметр. Эта функция (которая обеспечивается HDF Вот. Насколько я понимаю, он читает информацию из набора данных в буфер. У меня это работает, но только если я создаю массив 3d int, используя постоянные значения. Я должен быть в состоянии сделать это, используя значения, переданные пользователем.
Вот начало этой функции:

void* getDataTest(int countX, int countY)
{
int NX = countX;
int NY = countY;
int NZ = 1;

int data_out[NX][NY][NZ]; //I know this doesn't work, just posting it for reference

//.
//. more code here...
//.

// Read function is eventually called...
h5Dataset.read(data_out, H5::PredType::NATIVE_INT, memspace, h5Dataspace);
}

Это постоянно терпит неудачу на мне. Однако моя предыдущая реализация, которая использовала значения const int при создании массива data_out, работала нормально:

void* getDataTest(int countX, int countY)
{
const int NX = 5;
const int NY = 5;
const int NZ = 1;

int data_out[NX][NY][NZ];

//.
//. more code here...
//.

// Read function is eventually called...
h5Dataset.read(data_out, H5::PredType::NATIVE_INT, memspace, h5Dataspace);
}

Это отлично работает. Насколько я понимаю, для этой функции (которую я не могу контролировать) требуются пространства данных одинаковой размерности (например, трехмерный массив будет работать только с трехмерным массивом, тогда как двумерный массив будет работать только с двумерным массивом при копировании данных в буфер).

Итак, моя ключевая проблема здесь заключается в том, что я не могу понять, как создать 3D-массив int, которым функция чтения довольна (параметр функции является пустым *, но я не могу получить ничего, кроме 3d int массив для работы). Я пробовал массив 3D int, представленный в виде массива массивов массивов, используя:

   int*** data_out = new int**[NX];

но и это не удалось. Любые идеи о том, как я могу создать массив 3D-int вида int arrayName [непостоянное значение] [непостоянное значение] [непостоянное значение]? Я знаю, что вы не можете создать массив, используя непостоянные значения, но я добавил их, чтобы уточнить мою цель. Должен ли быть способ в C ++ использовать параметры функции в качестве значений для создания экземпляров массива?

2

Решение

Я думаю, что проще всего сделать это:

int* data_out = new int[NX * NY * NZ];

Затем вы можете получить доступ к этому 1D-массиву как к 3D-массиву:

int value = array[z * NX * NY + y * NX + x];

В стиле C ++ 11 вы можете использовать std::vector:

std::vector<int> data_out;
data_out.resize(NX * NY * NZ);

И вызывая функцию так:

h5Dataset.read(data_out.begin(), H5::PredType::NATIVE_INT, memspace, h5Dataspace);
2

Другие решения

Сделай это так:

    std::vector<int> array;

array.resize(Nx*Ny*Nz);

array[z*Ny*Nx + y*Nx + x] = value

Приятно иметь синтаксис массива [z] [y] [x], но его поддержка доставляет больше хлопот, чем стоит.

2

По вопросам рекламы [email protected]