2017-01-04 5 views
2

У меня есть функция, которая принимает параметр void * buffer. Эта функция (которая предоставляется HDF here.По моему мнению, она считывает информацию из набора данных в буфер. У меня это работает, но только если я создаю 3D-массив с постоянными значениями. Мне нужно иметь возможность сделать это с использованием значений, переданных в пользователем Вот начало этой функции:..Создание 3D-массива в C++ с использованием переданных параметров

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); 
} 

Это постоянно терпит неудачу на меня, однако, моя реализация previoud, что используются значения 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); 
} 

Это прекрасно работает. По моему мнению, эта функция (которой у меня нет ntrol) требует данных с одинаковой размерностью (например, трехмерный массив будет работать только с трехмерным массивом, а 2D-массив будет работать только с 2D-массивом при копировании по данным в буфер).

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

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

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

+1

Я думаю, что это метод, который вы хотели сделать ссылку: https://support.hdfgroup.org/HDF5/doc/cpplus_RM/class_h5_1_1_data_set.html#a2f0278a519122419ae9981666277c9bb – Creak

+0

Спасибо, Я обновил сообщение. – Roka545

ответ

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); 
+0

Хотя я проголосовал за ответ, дополнительное замечание * стиля C++ 1 меня беспокоит, так как ему нужно, чтобы NX * NY * NZ' была константой времени компиляции, и в этом случае OP мог бы легко сделать C и не задал бы этот вопрос. –

+0

Правда! Тогда единственным решением является std :: vector, я отредактирую свой ответ. – Creak

2

Делают это так:

std::vector<int> array; 

    array.resize(Nx*Ny*Nz); 

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^