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

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

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

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

16 ответов

14 просмотров

Лучше 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 Автор вопроса

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта