Страницы

Поиск по вопросам

среда, 15 мая 2019 г.

Динамический массив с произвольным количеством измерений

Помогите разобраться с созданием массива: задача в том, чтобы динамически построить массив с произвольным количеством измерений и их произвольной глубиной. На вход поступает одномерный массив int ndims[] с произвольным (n) количеством элементов, где i-ый элемент определяет глубину i-го измерения целевого массива, а количество его измерений, соответственно, равно n Алгоритм мне вроде и понятен: создаем массив глубиной ndims[0] с указателями, затем создаем ndims[0] количество массивов глубиной ndims[1] и присваиваем их адреса элементам первого массива, и так далее для каждого из созданных (можно оформить рекуррентно). На бэйсике я бы это написал, так как там любой "указатель" - это банально integer, содержащий адрес в памяти, нет никаких проблем с присваиванием и преобразованием. Но у меня маленький опыт писания на C++, я не слишком хорошо владею этим языком и абсолютно не понимаю, как реализовать это всё на нем. Хотелось бы получить вашу помощь, заранее спасибо!


Ответ

Можно представить массив в виде дерева. Динамический массив динамических массивов динамических массивов и т.д.. template struct MultiArray { MultiArray(const T& val=T()): Value(val) {}; MultiArray& operator[](uintp index) {return SubArrays[index];} void Add(const T& val) {SubArrays.push_back(val);} operator T&() {return Value;} vector SubArrays; T Value; }; Конечно, этот способ не самый лучший, так приходится хранить много лишнего. К тому же он не для новичков в C++. Это первое что пришло в голову. Надеюсь, разберёшься, как построить такой массив по массиву измерений?

Комментариев нет:

Отправить комментарий