Библиотека собеса по C++ | вопросы с собеседований
4.68K subscribers
387 photos
2 videos
168 links
Вопросы с собеседований по C++ и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9ccf302b

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
🧨 Как преобразовать std::vector в массив?

Это довольно просто сделать. Достаточно просто разыменовать первый элемент вектора

std::vector<int> vec = {1, 2 , 3};
int* arr = &vrc[0];


Это работает, потому что все элементы std::vector хранятся последовательно
🔍 Что такое std::span?

std::span — это шаблонный класс-обертка, который предоставляет удобный интерфейс доступа к последовательности элементов, не владея ими. Он позволяет работать с частью или целым массивом, без копирования данных

🛠 Как это работает?

Просто создаём объект std::span, указав начальный указатель на массив и размер, либо контейнер, и получаем легкий доступ к элементам
🍔Что делают std::move и std::forward?

Если простыми словами, то std::move делает && (r-value), чтобы из всех перегрузок была выбрана именно перегрузка с &&

std::forward предназначен для шаблонов, чтобы && передалось в вызываемую из шаблона функцию без изменений. В итоге срабатывает move-семантика и убирается ненужное копирование данных при вызове
🍔 Что такое принцип разделения интерфейса?

Принцип разделения интерфейса (Interface segregation principle) — четвёртый принцип SOLID

Описание
- Множество интерфейсов к разным клиентам гораздо лучше, чем один большой, который покрывает требование всех клиентов
- Снижается связанность в коде и тем самым уменьшает сложность его поддержки
🍔 В чём заключается смысл принцип инверсии зависимостей?

Принцип инверсии зависимостей (Dependency inversion principle) — пятый принцип SOLID

❗️ Описание
- Лучше зависеть от абстракции, чем от конкретной имплементации
- В ООП лучше передавать интерфейс, чем его реализацию
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👩‍🚀 Откуда космический корабль в C++?

<=> — это оператор spaceship operator в C++. Он был введен в стандарте C++20 и предназначен для использования в контексте трехзначной операции сравнения

🔎 Этот оператор выполняет сравнение двух выражений и возвращает одно из трех значений:
• Отрицательное значение, если левый операнд меньше правого
• Ноль, если левый операнд равен правому
• Положительное значение, если левый операнд больше правого
🔮 Челлендж от анализатора PVS-Studio: насколько вы внимательны?

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

Челлендж состоит из 10 фрагментов кода, в которых есть ошибки. Все они взяты из известных Open Source проектов. Если вы успеваете найти ошибку за 60 секунд — вам начисляется один балл. Фрагменты кода короткие, поэтому 60 секунд — это честное ограничение

👉 Ссылка
🫣 Что за оператор --> ?

На самом деле это два отдельных оператора, -- и >, т.е. постфиксный декремент и оператор больше. Условие можно переписать как while( (x--) > 0 )
🧐 Для чего нужна функция WinMain?

Функция WinMain является точкой входа в графические приложения в операционной системе Windows. Главная отличительная особенность отличающая её от обычной main заключается в том, что для графического приложения не будет выведено никакой консоли
🦾🧠🏋️Качаем мозги к лету!

Курс «Алгоритмы и структуры данных» для тех, кто хочет научиться работать с алгоритмами, подготовиться к собеседованию крупную IT-компанию и начать брать более сложные проекты.

➡️ Алгоритмы и структуры данных 35 990 ₽ 21 594

⭐️ Переходите и активируйте бесплатные вводные занятия курсаhttps://proglib.io/w/da6727d1

Вас ждут:

– 150 практических заданий и 47 видеолекций

– бессрочный доступ к обучению

– поддержка преподавателя в чате

А также очень харизматичный спикер из Яндекса 🙌🏻
🍔 Как распечатать все установленные переменные в CMake?

При использовании CMake часто возникает ситуация, когда поведение может отличаться от ожидаемого. Например установленная не та версия компилятора, стандарт C++ отличается от ожидаемого, проектные зависимости появившиеся неизвестно от куда. Один из способов решения — поискать проблему в установленных внешних переменных, для этого можно написать свой макрос (пример на картинке выше)
🍔 Как установить точность вывода в консоль для конкретной переменной

Для этого можно использовать вы можете связать функцию std::setprecision с переменной, для которой хотите установить точность

std::setprecision — функция из библиотеки iomanip (STL), которая устанавливает точность для вывода чисел с плавающей точкой. В аргументе std::setprecision задаётся количество цифр, которые мы хотим вывести
😱 Почему префиксный инкремент быстрее чем постфиксный?

Для постфиксного итератора неявно выделяется дополнительная память для хранения промежуточной переменной
🍔 Как преобразовать std::string в const char* или char*?

Если мы хотим передать std::string в функцию, которой требуется const char*, можно использовать .c_str()

Для получения неконстантной строки char*, вызываем .data(). Появилось в C++17, до этого можно было использовать &str[0]

‼️ Указатель становится недействительным, если строка уничтожается
🍔 Библиотека std::stacktrace

В C++23 появилась библиотека std::stacktrace для получения текущего стека вызовов функций,
а именно последовательность вызовов от точки входа main()

С помощью библиотеки можно посмотреть описание функции description() , исходный файл в котором находится функция source file() и номер строки source line()
🍔 Зачем нужен std::format?

❗️ В функция printf нет автоматического выведения типов, она подвержена ошибкам и не расширяема

❗️Потоковые объекты (stream) очень многословны и трудно оптимизируются

‼️ В C++20 появился std::format позволяющий форматировать строки в python стиле

🍔 Особенности std::format
• Безопасный для использования с разными типами (Type-safe)
• Поддерживает позиционные аргументы
• Расширяемость (поддержка пользовательских типов)
• Возвращает std::string
🍔 std::print() и std::println()

Если есть необходимость печатать в стандартный вывод и постоянно не пользоваться std::format, которая генерирует std::string, можно использовать функции std::print() и std::println(). Они были добавлены в C++23 и также поддерживают форматирование строк
😱 Что такое ошибка сегментации?

Ошибка сегментации (или segmentation fault) — вид ошибок связанный с обращением к памяти, которая не принадлежит процессу. Это вспомогательный механизм, который не дает вам «испортить» память и внедрить трудноотлаживаемые ошибки памяти. Когда вы получаете segfault, вы знаете, что делаете что-то не так с памятью — обращаетесь к переменной, которая уже была освобождена, записываете в часть памяти, доступную только для чтения, и т. д. Ошибка сегментации по сути одинакова в большинстве языков, позволяющих работать с памятью, принципиальной разницы между ошибками сегментации в C и C++ нет
🧨 Как очистить stringstream?

Для очистки содержимого строкового потока можно использовать
m.str("");

или
m.str(std::string());

что может быть более эффективно, из-за того что не вызываем конструктор std::string(const char*)