170 похожих чатов

Есть структура дерева: struct Tree{ int info;

string key;
Tree *left;
Tree *right;
~Tree();
};

Хочу создать динамический массив указателей на корни деревьев. И чтобы когда обращался к элементу массива по индексу (например, arr[49]), получал элемент типа Tree *. Как это реализовать?

16 ответов

5 просмотров

Лучше std::vector<std::unique_ptr<Tree>>

Artur-Prakapenka Автор вопроса
Anatoly Shirokov
Лучше std::vector<std::unique_ptr<Tree>>

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

Artur-Prakapenka Автор вопроса
Anatoly Shirokov
Вы даже не почувствуете замены

большинство методов вида: Tree * method_title (Tree *, ...);

Если замена на вектор юников действительно невозможна, то тогда что-то вроде: Tree** forest = new Tree*[n];

Artur-Prakapenka Автор вопроса
Vladimir
Если замена на вектор юников действительно невозмо...

Сориентируйте, пожалуйста, что делаю не так? Функция: Tree * addElem(Tree * tree, string key, int info); Код для проверки: Tree** arr = new Tree*[5]; arr[1] = addElem(arr[1], "yep", 6); cout << arr[1]->key << " < - - - > " << arr[1]->info << endl; Результат не такой, как я ожидал - завершение программы с отрицательным кодом (yep < - - - > 6 - ожидаемый результат, но его нет).

Artur Prakapenka
Сориентируйте, пожалуйста, что делаю не так? Функ...

Так new Tree*[5] это массив с мусором, обнули его или создай обьект Tree на месте каждого элемента

Artur Prakapenka
Сориентируйте, пожалуйста, что делаю не так? Функ...

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

Artur-Prakapenka Автор вопроса

А статический массив может содержать указатели на структуру?

Artur Prakapenka
Там именно мусор? Не NULL?

Лучше, кстати, как "нулевое" значение указателя использовать nullptr, некоторое количество потенциальных проблем избежите.

Artur-Prakapenka Автор вопроса
Vladimir
Лучше, кстати, как "нулевое" значение указателя ис...

nullptr - своего рода продвинутый NULL? Он также дает false в логических выражениях?

Artur Prakapenka
А статический массив может содержать указатели на ...

Динамическую память вообще лучше не трогать лишний раз. Доступ к ней не быстрый - кеш забивается. И все эти деревья, разбросанные по памяти смысла программировать нет, когда есть все библиотечное. Почитайте что-нибудь про "data-oriented design"

Artur-Prakapenka Автор вопроса

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта