Senior C++ Developer
11.6K subscribers
1.5K photos
3 videos
640 links
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr

РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba
Download Telegram
🤖 Что происходит внутри ИИ-агента, когда он работает с корпоративными данными?

6 октября в Архитектурном клубе Яндекс 360 разберут системную архитектуру таких решений: оркестрацию, инструменты, память, наблюдаемость и управление автономностью.

Отдельно поговорят об ограничениях системы, качестве поиска и итогового ответа, а также о том, как изолировать данные пользователей и не допускать утечек через индекс или кеш.

🗓 6 октября, 17:00 МСК
💻 Онлайн, бесплатно

→ Зарегистрироваться на эфир
Проверка возможности конструирования элемента с набором конкретных параметров

Когда шаблонный класс задан в виде template<class T, typename... Args>, бывает трудно понять, какие аргументы можно использовать. Метод is_constructible из библиотеки type_traits даёт неполный ответ: он показывает, существует ли конструктор под конкретные аргументы. Для более полной картины можно использовать еще один шаблон.
#вопросы_с_собеседований
Как следует обрабатывать ошибки во время выполнения в C++?


— Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
— Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
— Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
Упрощаем код с помощью if constexpr и концептов C++17/C++20

Смотреть статью
Алгоритм copy_n

Используется для копирования элементов из одного контейнера в другой.
malloc стал безопасен

В предыдущих версиях использование низкоуровневых функций, унаследованных из языка Си, не рекомендовалось. Проблема в том, что Си оперирует байтами, а в С++ происходит работа с объектами со своим временем жизни и областью видимости. До С++ 20 время жизни объекта начиналось после вызова оператора new. В новой версии все изменилось — принято считать, что набор низкоуровневых функций — memcpy, memmove, malloc, aligned_alloc, calloc, realloc, bit_cast, начинает время жизни объекта. Т. е. следующий код(см картинку) будет валиден.

Т. е. у нас появляется обратная совместимость с языком Си, но относительно С++ в новой трактовке.
Избавляемся от макросов

В целом, разработчики стандарта стараются исключить препроцессор. Как следствие, в новой версии можно не пользоваться макросами FILE и LINE, а взамен использовать std::source_location(см картинку).

Как мы видим, код становится более единообразным, в одном стиле, с расширяемым функционалом.
#вопросы_с_собеседований
В чем отличие vector от deque?

Ответ: Здесь вспоминают о наличии у deque методов push_front и pop_front. Но основное отличие в организации памяти, у vector она как у обычного Си-массива, т.е. последовательный и непрерывный набор байт, а у deque это фрагменты с разрывами. За счет этого отличия vector всегда можно привести к обычному массиву или скопировать целиком участок памяти, но зато у deque операции вставки/удаления в начало быстрее (O(1) против O(n)), ввиду того, что не нужно перемещать.
#вопросы_с_собеседований
Что такое чисто виртуальный метод и абстрактный класс?

Ответ: Чисто виртуальный метод — это метод, у которого отсутствует реализация. Абстрактный класс — это класс имеющий хотя бы один чисто виртуальный метод. Как следствие, экземпляр подобного класса не может быть создан т.к. отсутствует реализация виртуального метода.
Сортировка пузырьком

Определите, сколько обменов сделает алгоритм пузырьковой сортировки по возрастанию для данного массива.

Формат входных данных:
На первой строке дано целое число n (1 ≤ n ≤ 1000) – количество элементов в массиве. На второй строке – сам массив. Гарантируется, что все элементы массива – различные целые числа, не превышающие по модулю 10^9.

Формат выходных данных:
Выведите одно число – количество обменов пузырьковой сортировки.