Контест Middle RAII и умные указатели обновлено
Дерево на unique_ptr: перенос и удаление поддеревьев
Условие
Дерево каталогов хранится так, что каждый узел владеет детьми: std::vector<std::unique_ptr<Node>> children. Изначально есть только корень root. Команды:
add p c: создать узелcпоследним ребёнком узлаp;move c p: перенести узелcсо всем поддеревом последним ребёнком узлаp(гарантируется, чтоpне лежит в поддеревеcиcне корень);del c: удалить узелcсо всем поддеревом и вывести, сколько узлов удалено (cне корень).
Имена узлов уникальны (удалённые имена больше не используются). После всех команд выведите прямой обход дерева (узел, затем дети по порядку) через пробел.
Ввод: q (1 ≤ q ≤ 3000), затем q команд.
Вывод: по строке на каждую del, затем строка с обходом.
Пример 1
Ввод:
5
add root a
add a b
add root c
move b c
del a
Вывод:
1
root c b
Пример 2
Ввод:
3
add root x
add x y
del x
Вывод:
2
root
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Модель shared_ptr: кто и когда уничтожится
Следующий вопрос
Управляющий блок shared_ptr
Ещё по теме «RAII и умные указатели»
- Пользовательский удалитель
- Цикл из shared_ptr
- delete для new[]
- Объясни RAII на примерах
- Чем make_shared лучше shared_ptr(new T)
- Что происходит, когда умирает последний shared_ptr
- Что выведет: порядок конструкторов и деструкторов
- Что выведет: use_count и weak_ptr