Как реализовать многомерный массив, если измерение неизвестно во время компиляции? - PullRequest
0 голосов
/ 02 февраля 2011

Я хочу реализовать функцию, которая получает в качестве параметра измерение «n» массива целых чисел. Эта функция также получает значения «k_1, k_2, ..., k_n», определяющие размер массива. Затем эта функция заполнит этот n-мерный массив.

Как мне эффективно реализовать это с C ++?

Например, для n = 3 я бы использовал

vector < vector < vector < int > > > array;

Но я не знаю размер во время компиляции.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2011

Используйте одномерный массив и подделывайте другие измерения, используя умножение смещений для индексации, и вы можете передавать размеры измерений по вектору, т.е.

std::vector<int> create_md_array(const std::vector<int> & dimensions)
{
    int size = std::accumulate(dimensions.begin(), dimensions.end(), 1, std::multiplies<int>());
    return std::vector<int>(size);
}
0 голосов
/ 02 февраля 2011

У вас есть несколько вариантов.Вы можете реализовать это самостоятельно, просто умножив координаты на размеры, чтобы линеаризовать многомерный адрес, и просто иметь простой std::vector<whatever> для хранения данных.

В качестве альтернативы, вы можете использовать std::valarray и друзейсделать то же самое.У него есть набор классов, специально предназначенных для описываемой вами ситуации, но они используются так редко, что почти никто их не понимает.Самостоятельное написание кода дает возможность большинству людей легче читать и понимать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...