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
std::map и std::set — это контейнеры из стандартной библиотеки C++, которые предоставляют эффективные способы хранения и управления данными.

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

#include <map>
#include <iostream>

std::map<int, std::string> myMap;
myMap[1] = "one";
myMap[2] = "two";

for (const auto& pair : myMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}


2⃣ std::set — это контейнер, который хранит уникальные элементы в отсортированном порядке. Он предоставляет быстрые операции вставки, удаления и поиска. Пример:

#include <set>
#include <iostream>

std::set<int> mySet = {1, 2, 3};
mySet.insert(4);

for (int n : mySet) {
std::cout << n << std::endl;
}


✔️ Оба контейнера используют деревья поиска для обеспечения логарифмической сложности операций.

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

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

🔹 Использование this особенно полезно при необходимости вернуть объект из метода, реализовать метод цепочки вызовов или различать члены класса от параметров функции. Например:

class MyClass {
public:
int value;

void setValue(int value) {
this->value = value;
}
};


🔹В этом примере this->value обозначает член класса value, тогда как параметр функции также называется value. Без использования this компилятор не сможет различить их.

🔹Кроме того, this позволяет реализовать возврат текущего объекта из метода:

MyClass& increment() {
this->value++;
return *this;
}


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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131🤔1
🔸Inline-функции — это функции, которые компилятор пытается вставить непосредственно в место вызова, чтобы избежать накладных расходов на вызов функции. Это может улучшить производительность, особенно для небольших функций, которые часто вызываются. Для объявления функции inline используется ключевое слово inline.

inline int add(int a, int b) {
return a + b;
}


🔸Компилятор может игнорировать inline, если функция слишком сложная. Inline-функции должны быть определены в заголовочных файлах, чтобы компилятор имел доступ к их коду при компиляции каждого модуля.

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
🖇std::unordered_map — это контейнер из стандартной библиотеки C++, который реализует хеш-таблицу для хранения пар ключ-значение. В отличие от std::map, который хранит элементы в отсортированном порядке, std::unordered_map не гарантирует порядок элементов, но обеспечивает более быструю амортизированную сложность операций вставки, удаления и поиска — O(1).

🖇Ключи в std::unordered_map должны быть уникальными, а для их сравнения и хеширования используются функции std::hash и operator==. Это делает std::unordered_map подходящим для случаев, когда порядок не важен, но требуется высокая скорость доступа к элементам.

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥1🤩1💯1👨‍💻1
Аллокаторы — это объекты, которые управляют выделением и освобождением памяти для контейнеров. Они определяют, как и где будет выделяться память, предоставляя интерфейс для работы с памятью.

Стандартная библиотека C++ использует аллокаторы для контейнеров, таких как std::vector и std::list. Аллокаторы обеспечивают гибкость и позволяют оптимизировать использование памяти.

template <typename T>
class CustomAllocator {
public:
using value_type = T;

CustomAllocator() = default;

T* allocate(std::size_t n) {
return static_cast<T*>(::operator new(n * sizeof(T)));
}

void deallocate(T* p, std::size_t) {
::operator delete(p);
}
};


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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2
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