Ответы пользователя по тегу C++
  • Как создавать массивы с неограниченной вложенностью в c++?

    1HAWK1
    @1HAWK1
    В C++ невозможно создавать массивы с неограниченной вложенностью, поскольку размер массива должен быть известен во время компиляции. Однако можно создавать вложенные массивы с фиксированным числом измерений, а затем использовать указатели или динамическое выделение памяти для имитации неограниченной вложенности. Вот два подхода:

    1) Использование указателей:
    Одним из способов создания массивов с неограниченной вложенностью является использование указателей для создания массива указателей на массивы. Вот пример:

    int*** nestedArray;
    nestedArray = new int**[10]; // create an array of 10 pointers to int**
    for (int i = 0; i < 10; i++) {
        nestedArray[i] = new int*[5]; // create an array of 5 pointers to int* for each of the 10 int**
        for (int j = 0; j < 5; j++) {
            nestedArray[i][j] = new int[3]; // create an array of 3 int for each of the 50 int*
        }
    }


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

    2) Использование динамического выделения памяти:
    Другой способ создания массивов с неограниченной вложенностью — использование динамического выделения памяти с оператором new. Вот пример:

    int dims[] = {10, 5, 3}; // an array of the dimensions of the nested arrays
    int* arr = new int[dims[0] * dims[1] * dims[2]]; // create a one-dimensional array with the total number of elements
    int*** nestedArray = new int**[dims[0]]; // create an array of pointers to arrays of pointers
    for (int i = 0; i < dims[0]; i++) {
        nestedArray[i] = new int*[dims[1]]; // create an array of pointers to arrays for each of the pointers in the first level
        for (int j = 0; j < dims[1]; j++) {
            nestedArray[i][j] = arr + (i * dims[1] * dims[2]) + (j * dims[2]); // assign each pointer to the appropriate element in the one-dimensional array
        }
    }


    В этом примере мы сначала создаем одномерный массив с общим количеством элементов во вложенных массивах. Затем мы создаем массив указателей на массивы указателей и присваиваем каждому указателю соответствующий элемент в одномерном массиве. Вы можете продолжить вложение массивов, соответствующим образом изменив массив измерений и указатели. Обратите внимание, что вам нужно использовать оператор удаления, чтобы освободить память, выделенную с помощью new.
    Ответ написан
    Комментировать