C++ собеседования
839 subscribers
106 photos
222 links
Подготовка к собеседованиям на позицию C/C++ разработчик

Еще больше на сайте https://frontview-it.ru

Backend собеседования - @frontview_backend
C/C++ работа - @frontview_cpp_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
C++ собеседования pinned «ℹ️Подписывайся на наши новые каналы! 🖥 JS собеседования 🖥 Backend собеседования»
➡️ std::find — это алгоритм из библиотеки <algorithm> в C++, который используется для поиска элемента в диапазоне. Он принимает три аргумента: итераторы начала и конца диапазона, а также значение, которое нужно найти.

#include <vector>
#include <algorithm>
#include <iostream>

std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = std::find(vec.begin(), vec.end(), 3);

if (it != vec.end()) {
std::cout << "Element found at index: " << std::distance(vec.begin(), it) << std::endl;
} else {
std::cout << "Element not found" << std::endl;
}


➡️ Если элемент найден, std::find возвращает итератор на него, иначе — итератор конца.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112
Ключевое слово void используется для указания, что функция не возвращает значения, или для обозначения указателя на неизвестный тип данных. Оно помогает явно указывать отсутствие возвращаемого значения или тип данных, что улучшает читаемость и понимание кода.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122
😎 std::variant — это тип, который может содержать один из нескольких типов. Это альтернатива union, но с поддержкой типов, которые имеют нестандартные конструкторы и деструкторы.

#include <variant>
#include <iostream>

int main() {
std::variant<int, double, std::string> data;

data = 10;
std::cout << std::get<int>(data) << std::endl;

data = 3.14;
std::cout << std::get<double>(data) << std::endl;

data = "Hello";
std::cout << std::get<std::string>(data) << std::endl;

return 0;
}


😎 std::variant позволяет безопасно переключаться между типами, используя std::get для доступа к текущему значению.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112
🟢 Константный указатель (T* const) — это указатель, адрес которого нельзя изменить после инициализации. Значение, на которое он указывает, может изменяться.

int value = 10;
int* const ptr = &value;
*ptr = 20; // OK
ptr = &anotherValue; // Ошибка


🟢 Указатель на константу (const T*) позволяет изменять адрес, но не значение, на которое он указывает.

const int value = 10;
const int* ptr = &value;
ptr = &anotherValue; // OK
*ptr = 20; // Ошибка


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥21
Поток — это объект, который позволяет выполнять параллельные вычисления. Создать поток можно с помощью класса std::thread, передав ему функцию или лямбда-выражение, которое будет выполняться в этом потоке.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
🪅 nullptr — это ключевое слово, введенное в стандарте C++11, которое представляет собой указатель на нулевой адрес. Оно заменяет использование NULL, который в C++ является просто макросом, определенным как 0. Использование nullptr улучшает безопасность и ясность кода, так как он имеет тип std::nullptr_t, что позволяет избежать неоднозначностей при перегрузке функций.


void foo(int* ptr) {
// Функция принимает указатель на int
}

void foo(double val) {
// Функция принимает double
}

foo(nullptr); // Вызовет foo(int*), так как nullptr имеет тип указателя


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

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1
📌 Структура — это пользовательский тип данных, который позволяет объединять данные разных типов. Она используется для группировки связанных данных в одном объекте, что упрощает управление и организацию данных.

〰️ Структуры могут содержать переменные (поля) и функции (методы). В отличие от классов, по умолчанию все члены структуры имеют публичный доступ.


#include <iostream>

// Определение структуры
struct Point {
int x;
int y;

// Метод для вывода координат
void print() {
std::cout << "Point(" << x << ", " << y << ")" << std::endl;
}
};

int main() {
// Создание экземпляра структуры
Point p;
p.x = 10;
p.y = 20;

// Вызов метода структуры
p.print(); // Вывод: Point(10, 20)
}


〰️ Структуры полезны для моделирования объектов с несколькими свойствами, таких как точки, координаты и т.д.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Исключение — это механизм обработки ошибок, который позволяет программе реагировать на аномальные или неожиданные ситуации, возникающие во время выполнения, путем передачи управления специальным блокам кода.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31
🔹 Лямбда-выражение — это анонимная функция, которая может быть определена в месте, где она используется. Оно позволяет создавать функции без необходимости их именования, что упрощает код и делает его более гибким.

🔹 Синтаксис лямбда-выражения включает в себя захват переменных, параметры, тело функции и возвращаемый тип.


auto sum = [](int a, int b) -> int {
return a + b; // Возвращает сумму a и b
};


🔹 Лямбда-выражения часто используются в алгоритмах стандартной библиотеки, таких как std::for_each или std::sort.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
Наследование позволяет создавать новые классы на основе существующих. Это способствует повторному использованию кода и организации иерархий классов. Базовый класс передаёт свои свойства и методы производному классу.


#include <iostream>
using namespace std;

// Базовый класс
class Animal {
public:
void eat() {
cout << "Eating..." << endl;
}
};

// Производный класс
class Dog : public Animal {
public:
void bark() {
cout << "Barking..." << endl;
}
};

int main() {
Dog dog;
dog.eat(); // Наследованный метод
dog.bark(); // Собственный метод
return 0;
}


Производный класс Dog наследует метод eat() от базового класса Animal.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
Makefile — это файл, используемый утилитой make для автоматизации процесса сборки программ. Он содержит набор правил и инструкций, которые определяют, как компилировать и связывать проект, упрощая управление зависимостями и ускоряя сборку.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92👨‍💻1
⬇️ Поток — это абстракция для работы с последовательностями данных, таких как файлы, консольный ввод/вывод и строки. Потоки позволяют читать и записывать данные в унифицированной форме.

🔵Для создания потока в C++ можно использовать стандартные библиотеки, такие как <iostream> для консольного ввода/вывода и <fstream> для работы с файлами.Пример создания потока для чтения из файла:


#include <fstream>
#include <iostream>
#include <string>

int main() {
std::ifstream file("example.txt"); // Создание потока для чтения из файла
std::string line;
if (file.is_open()) {
while (getline(file, line)) { // Чтение файла построчно
std::cout << line << std::endl; // Вывод строки на консоль
}
file.close(); // Закрытие файла
} else {
std::cerr << "Не удалось открыть файл" << std::endl;
}
return 0;
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Адресная арифметика — это техника работы с указателями, позволяющая перемещаться по элементам массива или структуры данных, изменяя адрес, на который указывает указатель. Она используется для эффективного доступа к элементам памяти, особенно в низкоуровневом программировании, где важна скорость и контроль над памятью.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
Шаблон функции позволяет создавать функции, которые работают с различными типами данных, не дублируя код. Это достигается за счет использования параметров шаблона, которые заменяются конкретными типами во время компиляции.

Объявление шаблона функции начинается с ключевого слова template, за которым следует список параметров шаблона в угловых скобках. Пример:


template <typename T>
T add(T a, T b) {
return a + b; // Функция складывает два значения типа T
}


*️⃣ В данном примере T — это параметр шаблона, который будет заменен на конкретный тип данных при вызове функции add.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
STL (Standard Template Library) — это библиотека шаблонов, предоставляющая набор стандартных классов и функций для работы с коллекциями данных. Основные компоненты STL включают контейнеры (такие как векторы и списки), алгоритмы (например, сортировка и поиск) и итераторы, которые обеспечивают доступ к элементам контейнеров.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
🛑weak_ptr — это умный указатель, который предоставляет неблокирующую ссылку на объект, управляемый shared_ptr. Он не увеличивает счетчик ссылок на объект, что помогает избежать циклических зависимостей и утечек памяти.

🛑weak_ptr используется для проверки существования объекта и получения shared_ptr, если объект еще существует. Для этого применяется метод lock(), который возвращает shared_ptr.

#include <iostream>
#include <memory>

class Node {
public:
std::weak_ptr<Node> next; // Слабая ссылка на следующий узел
};

int main() {
auto node1 = std::make_shared<Node>();
auto node2 = std::make_shared<Node>();

node1->next = node2; // Установка слабой ссылки

if (auto sharedNext = node1->next.lock()) {
std::cout << "Next node is alive\n";
} else {
std::cout << "Next node is expired\n";
}
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩1
Конструктор — это специальный метод класса, который автоматически вызывается при создании объекта и инициализирует его. Деструктор — это метод, который вызывается при удалении объекта и освобождает ресурсы, занимаемые объектом, такие как память или файлы.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
😎 Механизм обработки исключений позволяет управлять ошибками и исключительными ситуациями в программе. Он основан на ключевых словах try, catch и throw.


try {
// Код, который может вызвать исключение
if (errorCondition) {
throw std::runtime_error("Error occurred");
}
} catch (const std::exception& e) {
// Обработка исключения
std::cout << "Exception caught: " << e.what() << std::endl;
}


😎 try блок содержит код, который может вызвать исключение. throw используется для генерации исключения. catch блок перехватывает и обрабатывает исключение, предоставляя возможность восстановить выполнение программы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👨‍💻1
Профилирование — это процесс анализа производительности программы с целью выявления узких мест и оптимизации использования ресурсов, таких как процессорное время и память. Оно необходимо для повышения эффективности и скорости работы приложения, особенно в ресурсозатратных системах.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2