Создайте N-мерный массив, где N определяется во время выполнения (C ++)

Я кодирую N-Dim изображения кубов в другой формат изображения. Я не знаю размеры изображения до времени выполнения, и библиотеке, которую я использую для чтения из исходного изображения, нужен буфер назначения массива N-dim в качестве параметра.

Как я могу объявить такой массив в C ++? Спасибо 🙂

3

Решение

Короткий ответ: вы не можете объявить такой массив в C ++. Размеры массива являются частью типа (за исключением того, что иногда значение один размеры могут быть неизвестны, для extern объявление массива). Число измерений всегда является частью типа, и тип должен быть известен во время компиляции.

Вместо этого вы можете использовать «плоский» массив соответствующего размера. Например, если вам нужен массив 3×3 … x3, вы можете вычислить 3^n во время выполнения, динамически распределить так много int (вероятно, используя vector<int> для удобства), и у вас есть память с тем же макетом, что и int[3][3]...[3], Вы можете обратиться к этой памяти через void*,

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

2

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

Вы не можете использовать массив в этом случае. Массив предназначен только для тех данных, размер и размер которых известны во время компиляции. Попробуйте использовать массив станд :: вектор вместо

-2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector