C++ собеседования
752 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
➡️ 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
😎 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
📌 Структура — это пользовательский тип данных, который позволяет объединять данные разных типов. Она используется для группировки связанных данных в одном объекте, что упрощает управление и организацию данных.

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


#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
Наследование позволяет создавать новые классы на основе существующих. Это способствует повторному использованию кода и организации иерархий классов. Базовый класс передаёт свои свойства и методы производному классу.


#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
⬇️ Поток — это абстракция для работы с последовательностями данных, таких как файлы, консольный ввод/вывод и строки. Потоки позволяют читать и записывать данные в унифицированной форме.

🔵Для создания потока в 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
🛑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
📝 std::enable_if — это шаблон, используемый для реализации SFINAE (Substitution Failure Is Not An Error). Он позволяет включать или исключать функции и классы из перегрузки на этапе компиляции в зависимости от выполнения определённых условий.


#include <type_traits>

// Функция доступна только для целых типов
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
foo(T value) {
return value * 2;
}

// Функция доступна только для вещественных типов
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type
foo(T value) {
return value / 2;
}


➡️ std::enable_if помогает создавать более безопасный и гибкий код, контролируя доступность функций на основе типов.

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

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


#include <iostream>
using namespace std;

class Base {
public:
virtual void show() { // Виртуальная функция
cout << "Base class" << endl;
}
};

class Derived : public Base {
public:
void show() override { // Переопределение функции
cout << "Derived class" << endl;
}
};

int main() {
Base* obj = new Derived();
obj->show(); // Вызов функции Derived
delete obj;
}


☑️ Полиморфизм позволяет использовать один интерфейс для работы с разными типами объектов, улучшая гибкость и расширяемость кода.

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
💡 std::thread::detach используется для отделения потока от объекта std::thread, позволяя потоку продолжать выполнение независимо. После вызова detach, объект std::thread больше не связан с потоком и не может быть использован для управления им. Это полезно, когда поток должен работать в фоновом режиме, но важно помнить, что необходимо обеспечить завершение потока до завершения программы, иначе поведение будет неопределённым.


#include <iostream>
#include <thread>

void backgroundTask() {
// Фоновая задача
std::cout << "Фоновая задача выполняется\n";
}

int main() {
std::thread t(backgroundTask);
t.detach(); // Отделяем поток
// Поток продолжает выполнение независимо
std::cout << "Главный поток завершён\n";
return 0;
}


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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
👉 В C++ set и multiset — это контейнеры из библиотеки стандартных шаблонов (STL), которые хранят элементы в отсортированном порядке.

1⃣ set хранит уникальные элементы, не допускает дубликатов.

#include <set>
#include <iostream>

int main() {
std::set<int> s = {1, 2, 3};
s.insert(2); // Дубликат не добавится
for (int x : s) {
std::cout << x << " "; // Вывод: 1 2 3
}
}


2⃣ multiset позволяет хранить дубликаты.

#include <set>
#include <iostream>

int main() {
std::multiset<int> ms = {1, 2, 3};
ms.insert(2); // Дубликат добавится
for (int x : ms) {
std::cout << x << " "; // Вывод: 1 2 2 3
}
}


Основное отличие в том, что set не допускает дубликатов, а multiset — допускает.

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

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