Senior C++ Developer
13.1K subscribers
1.26K photos
3 videos
576 links
№ 4931128893
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr
Download Telegram
#вопросы_с_собеседований
Что такое флажки компиляции?

Флажки компиляции — это специальные опции, которые можно указать при компиляции кода, чтобы включить или отключить определенные возможности языка или библиотек.

Используя разные комбинации флажков, можно тонко настроить процесс компиляции под нужды конкретного проекта.

Например:
std=c++11: включает поддержку стандарта C++11.
O2: включает оптимизацию кода на уровне O2.
g: добавляет отладочную информацию в скомпилированный файл.
Wall: включает предупреждения обо всех возможных ошибках.
DDEBUG: определяет макрос DEBUG, чтобы можно было использовать условную компиляцию.
I<path>: добавляет директорию по указанному пути в поиск заголовочных файлов.
#вопросы_с_собеседований
Зачем нужен виртуальный деструктор?

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

Без ключевого слова virtual у родительского класса Base деструктор порожденного класса не был бы вызван. Т.е. вызвался бы только ~Base():
Hello from ~Base()
string at()

std::string::at можно использовать для извлечения символов по символам из заданной строки.

Подробнее ознакомиться можно здесь.
Работа с файлами

Для того, чтобы прочитать файл, понадобится выполнить те же шаги, что и при записи, с небольшими изменениями:
1) создать объект класса ifstream и связать его с файлом, из которого будет производиться считывание;
2) прочитать файл;
3) закрыть файл.
Call Stack Logger — инструментирование функций как способ отслеживания потока выполнения программы

Доводилось ли вам когда-нибудь работать над C++ проектом с такой огромной кодовой базой, что понимание того, что на самом деле происходит во время выполнения программы, требует кучи времени и сил?

Смотреть статью
Атрибуты [[likely]] и [[unlikely]]

В C++20 мы получили новые атрибуты [[likely]] и [[unlikely]], которые позволяют подсказывать оптимизатору, является ли путь выполнения более или менее вероятным.
Строковые литералы как параметры шаблона

Начиная с C ++ 20, вы можете использовать строку в качестве параметра шаблона, не являющегося типом. Идея состоит в том, чтобы использовать стандартную строку basic_fixed_string, которая имеет конструктор constexpr. Конструктор constexpr позволяет ему создать экземпляр фиксированной строки во время компиляции.

Вроде бы мелочь, а приятно — не нужно производить обходных маневров и использовать лишнюю память.
Кортеж — tuple

Как и pair, tuple — коллекция значений различных типов данных конкретного размера.

В некоторых случаях вместо tuple удобнее использовать std::array. Это обычный массив с некоторыми функциями стандартной библиотеки C++, который был добавлен в C++11.
Алгоритмы all_of, any_of и none_of

Начиная с C ++ 11, в STL C ++ добавляются некоторые новые интересные алгоритмы. Эти алгоритмы работают с массивом и полезны для экономии времени во время кодирования и, следовательно, также полезны в конкурентном программировании.
This media is not supported in your browser
VIEW IN TELEGRAM
Как написать «Змейку» на C++ в четыре переменные?

Пишем классическую «Змейку», как на КДПВ, в четыре переменные.

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

Строит отсортированную последовательность из элементов, которые встречаются только в первой последовательности [first1, last1) или только во второй - [first2, last2).
Для чего нужен аллокатор и как создать свой собственный аллокатор?

Аллокатор это шаблонный класс, который отвечает за выделение памяти и создание объектов. По умолчанию все контейнера используют std::allocator<T>.
В языке c++ имеется так же возможность написать свой аллокатор. У своего алокатора должно быть такое объявление(см картинку).
#вопросы_с_собеседований
В чем разница между struct и class?

Ответ: Практически ни в чем. В struct модификаторы доступа по умолчанию public, в class private. Также отличается и наследование по умолчанию, у struct — public, у class — private.
Макрос watch

Макрос watch — один из самых полезных приёмов.

При отладке кода watch(переменная) выведет имя переменной и её значение.
init внутри if и switch

Эта возможность C++17 мне полюбилась сразу же, как только я узнал о ней.

Теперь вы можете инициализировать переменные и проверять условия сразу же внутри блоков if и switch. Это помогает сохранять код понятным и чистым.
Сортировка пузырьком

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

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

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