@evelone1379

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

Например, как мне создать такой массив:
[test] =>
    "str1",
    "str2",
    [str3] =>
        "str4",
        [str5] =>
            "str6"

И так далее, но количество вложенности не известно заранее
  • Вопрос задан
  • 150 просмотров
Решения вопроса 2
Adamos
@Adamos
"Такой массив" - это у которого третий член не того типа, как два первых? Вы какой-то не тот язык взяли под эту задачу.
Впрочем, если не пытаться воспроизвести то, что вы нарисовали, а просто строить дерево, то, например, так:
struct structName {
  std::string title;
  std::vector< structName > children;
}
Ответ написан
Комментировать
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.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы