C ++ переменная для хранения любого размерного массива - PullRequest
1 голос
/ 22 апреля 2019

Возможно ли в c ++ создать тип переменной, которая может содержать массив с любыми измерениями?Я имею в виду переменную, которая может хранить 1, 2, 3 ... размерный массив.

Я предполагаю, что это может быть сделано с помощью шаблонов, но я не мог понять, как.Буду очень признателен, если кто-нибудь сможет помочь.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Звучит так, как будто вы хотите «создать функцию, которая может умножать массивы», которая будет использоваться «для множества разных измерений».

Я бы справился с этим так же, как я бы имел дело с vector оператор вывода: использовать шаблоны с рекурсией!

Если бы я хотел сделать функцию для суммирования всех чисел в двух vector при их добавлении, я мог бы сделать:

template <typename T>
int operator+(std::vector<T> v1, std::vector<T> v2) {
    if(v1.size() != v2.size()) { throw; } //for simplicity
    int sum = 0;
    for(size_t x = 0; x < v1.size(); x++) {
        sum += v1.at(x) + v2.at(x);
    }
    return sum;
}

Обратите внимание, что магия здесь находится в строке

sum += v1.at(x) + v2.at(x);

Если v1.at(x) и v2.at(x) равны std::vector, мы просто будем рекурсивно вызывать этофункционировать снова.Но если они int, мы добавим их в sum и продолжим.

Вы можете увидеть это в действии здесь: ideone

Вы можете сделать что-то подобное для умножения массива.Разбейте проблему на более мелкие части, чтобы вы могли использовать рекурсию и позволить шаблонам обрабатывать все остальное!

2 голосов
/ 22 апреля 2019

Вы когда-нибудь пробовали динамическую память?В случае ниже, это создает двумерный массив.

http://www.cplusplus.com/doc/tutorial/dynamic/

Если вы хотите иметь трехмерный массив, возможно, вы можете попытаться определить двумерный массив в шаге два вышеприведенного примера.

Для четырехмерного массива - трехмерный массив в шаге 2.

Или вы можете продолжать использовать указатель.

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