Поиск позиции элемента в std::vector с использованием std::optional
Возвращайте индекс первого совпадения, а при отсутствии — std::nullopt. optional отличает найденный нулевой индекс от ситуации, когда элемента нет.
Читать ответПодготовка к интервью
3221 вопрос в категории «Лайвкодинг»
Что проверяют на интервью
В этой подборке вопросы сгруппированы по формату «Лайвкодинг», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: frontend, browser, database.
Каталог
Возвращайте индекс первого совпадения, а при отсутствии — std::nullopt. optional отличает найденный нулевой индекс от ситуации, когда элемента нет.
Читать ответВывод будет A1:B:A2:C:~C:~A2:~B:~A1:. Сначала создаются базовая часть и её поля, затем поля производного класса и его тело; разрушение идёт в обратном порядке.
Читать ответНа каждом проходе сравнивайте соседние элементы и меняйте их местами, если порядок нарушен. Максимум оставшейся части постепенно перемещается в конец; отсутствие обменов позволяет закончить раньше.
Читать ответДеструктор в условии уже содержит нужную логику: при непустом счётчике уменьшает его и удаляет ресурс вместе со счётчиком при нуле. Пустой объект безопасно игнорируется.
Читать ответДля целых объёмов выполните бинарный поиск ёмкости между максимальным сосудом и суммой объёмов. Проверка одной ёмкости жадно заполняет баки по порядку и считает, хватает ли их.
Читать ответСравните выведенные шаблонные типы через std::is_same. Нужно заранее решить, считаются ли const и ссылки существенными: обычно для такого вопроса сравнивают базовые типы значений.
Читать ответСначала превратите pattern в множество, затем посчитайте символы source, принадлежащие этому множеству. Повтор символа в pattern не должен многократно увеличивать счётчик.
Читать ответДля поля shared_ptr все пять специальных операций обычно достаточно объявить = default. Копирование разделяет владение тем же int, а перемещение передаёт его, не создавая отдельной копии числа.
Читать ответИспользуйте erase-remove idiom, а в C++20 — std::erase(vec, 1). Это удаляет все единицы за линейное время, не выполняя отдельное сдвигание хвоста после каждого совпадения.
Читать ответПосле throw 2 начинается раскрутка стека, и деструктор B выпускает новое исключение. Это вызывает std::terminate до входа в catch, несмотря на noexcept(false).
Читать ответНужны RAII-блокировки, безопасное добавление и фильтрация без удаления элементов во время индексного обхода. В исходнике исключение оставляет mutex захваченным, а условия фильтра удаляют выбранные типы.
Читать ответСначала транспонируйте квадратную матрицу, затем разверните каждую строку. Эта комбинация даёт поворот на 90° по часовой стрелке без дополнительной матрицы.
Читать ответ