Задачи и тесты по программированию | proghub
2.42K subscribers
655 photos
16 videos
23 files
915 links
Публикуем задачи и вопросы для подготовки к собесу.

Сотрудничество: @cyberJohnny
Download Telegram
👆Пояснение к предыдущему вопросу

👨🏻‍💻 Так как f находится в двух разных namespace, обычно такие вещи не компилируются, но тут нас ждёт страшный зверь под названием ADL.

Из-за ADL argument-dependent name lookup a.k.a. "Koenig lookup", поведение вполне нормальное.

С этой технологией, для lookup выбираются все namespace, которые перечислены в аргументах. Поэтому в данном случае мы рассмотрим только namespace x. Это сделано в основном для operator= и операторов сравнения, чтобы не надо было указывать namespace операторов, но к сожалению ведёт к достаточно сложным последствиям, если использование неправильно.

Задачи и тесты по программированию | proghub
👆Пояснение к предыдущему вопросу

👨🏻‍💻 В этом коде две проблемы -- первая, что в цикле OtherData будет копироваться, лучше сделать const OtherData& item, вторая -- то, что вектор будет расти во время push_back и стоит сделать reserve перед, чтобы не было слишком много аллокаций. Поэтому надо было выбрать второй вариант, так как первый отсутствовал.

Во всём остальном оптимально. RVO (return value optimization) применяется во всех функциях, копирования при вызове Convert не происходит, а произойдёт просто навешивание ссылки. push_back создаст объект на месте, так как оно будет Rvalue.

Задачи и тесты по программированию | proghub
👆Пояснение к предыдущему вопросу

👨🏻‍💻 Правильный ответ, что e будет являться временным объектом, так как итератор в std::map возвращает std::pair<const int, int>, поэтому произойдёт копирование пары, e будет временным объектом, который будет разрушаться и это является неопределённым поведением. См. value_type в https://en.cppreference.com/w/cpp/container/map

Все остальные ответы неправильные. const int* является константным по данным и присваивание корректно, если нет return statement из main, то оно по умолчанию ноль, а также main может быть без аргументов.

Задачи и тесты по программированию | proghub
👍1
Какой контейнер типа Container нельзя передавать в функцию EraseIf?
Anonymous Quiz
18%
std::unordered_set
11%
std::list
39%
все варианты верные
7%
std::map
14%
std::vector
11%
std::unordered_multimap