C++ Эволюция
2.72K subscribers
296 photos
2 videos
106 links
Обучающий канал по C++
Download Telegram
Вопрос на собеседовании

Как работает Rule of Five в C++ и когда его следует применять?

Ответ ⬇️
Rule of Five говорит о том, что если ваш класс управляет ресурсами, вам нужно явно определить пять специальных методов: конструктор копирования, оператор присваивания копированием, конструктор перемещения, оператор присваивания перемещением и деструктор. Это важно, чтобы избежать утечек ресурсов или неправильного управления памятью при копировании или перемещении объектов.

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning
👩‍💻
Главная конференция по бизнесу в Telegram

31 октября в Москве пройдёт первая конференция по Telegram от крупнейшего сервиса аналитики Telemetr. Топы Телеграм-рынка, маркетологи и представители бизнеса обсудят самые актуальные тенденции и перспективы развития платформы Telegram.

Присоединиться к мероприятию можно будет и онлайн. Тут найдёте всю информацию - https://telemetr.pro.

На конференции вас ждут:
- 20+ опытных спикеров
- 1000+ онлайн и офлайн участников
- две сцены
- нетворкинг активности
- лаунж зона
- вкусный фуршет
- яркое afterparty в PAPA Moscow

Спикерами главной сцены будут: Артемий Лебедев, руководитель Telemetr - Денис Ларионов, основатель агентства GoDigital - Сурен Альбертян, основатель Сидорин ЛАБ - Дмитрий Сидорин и многие другие!

За подробностями сюда - https://telemetr.pro

А купить билет со скидкой в 10% можно, использовав наш промокод - TMConf10

Купить билет - https://telemetr.pro
➡️ Использование std::flat_map для оптимизации производительности

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

В отличие от std::map, std::flat_map оптимизирован для случаев, когда количество элементов невелико, так как хранение данных в последовательной области памяти снижает накладные расходы и улучшает кэширование.

• std::flat_map полезен для приложений, где требуется высокая производительность при небольших объемах данных и частых поисках.

C++ Learning 👩‍💻
➡️ Использование std::latch для синхронизации потоков

std::latch — это примитив синхронизации, который позволяет одному или нескольким потокам ожидать, пока другие потоки не завершат выполнение. В отличие от std::barrier, он не перезагружается после достижения условия синхронизации, что делает его полезным для одноразовой координации.

• std::latch полезен в ситуациях, когда необходимо, чтобы один поток ждал завершения других потоков.

C++ Learning 👩‍💻
➡️ Использование библиотеки cista для сериализации данных в C++

cista — это легковесная библиотека для эффективной бинарной и текстовой сериализации данных. Она обеспечивает высокую производительность и минимальные накладные расходы, делая её идеальной для сохранения состояния и передачи данных.

cista — отличный выбор для разработчиков, которым нужна эффективная сериализация больших объемов данных без лишней сложности.

🔗 Ссылочка на доку

C++ Learning 👩‍💻
Вопрос на собеседовании

Что такое "SFINAE" (Substitution Failure Is Not An Error) в C++, и как он применяется в шаблонном программировании?

Ответ ⬇️
SFINAE — это принцип C++, при котором ошибка подстановки шаблонных параметров не приводит к ошибке компиляции, а просто игнорирует неудачные варианты. Это используется для создания разных реализаций шаблонных функций в зависимости от типов.

Пример использования ⚙️
#include <iostream>
#include <type_traits>

// Шаблон для типов, поддерживающих операцию сложения
template <typename T>
typename std::enable_if<std::is_arithmetic<T>::value, T>::type
add(T a, T b) {
return a + b;
}

// Шаблон для других типов (например, строк)
template <typename T>
typename std::enable_if<!std::is_arithmetic<T>::value, void>::type
add(T a, T b) {
std::cout << "Сложение недоступно для этого типа.\n";
}

int main() {
std::cout << add(5, 3) << std::endl; // Сложение чисел
add(std::string("Hello"), std::string("World")); // Строки не поддерживают сложение
return 0;
}

SFINAE позволяет выбирать реализацию функции add() в зависимости от типа аргументов: для числовых типов выполняется сложение, а для других типов выводится сообщение.


C++ Learning 👩‍💻
➡️ Использование библиотеки di для создания зависимостей в C++

di — это легковесная библиотека для управления зависимостями в C++. Она предоставляет простой способ внедрения зависимостей, что делает код более модульным и тестируемым.

di поддерживает автоматическое создание зависимостей и упрощает управление компонентами в сложных проектах.

🔗 Ссылочка на доку

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning
👩‍💻
⚙️ std::rename()

В C++ функция std::rename() из заголовка <cstdio> используется для переименования файла или перемещения его в новую директорию. Это стандартный способ работы с файлами на уровне ОС.

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

C++ Learning
👩‍💻
➡️ Использование библиотеки Glaze для сериализации данных в C++

Glaze — это мощная библиотека для сериализации объектов C++ в различные форматы, такие как JSON, с высокой производительностью. Она поддерживает статическую сериализацию, обеспечивая компактность и быстрое преобразование данных.

Glaze подходит для приложений, где важна производительность при работе с большими объемами данных и их передачей в различные форматы.

🔗 Ссылочка на доку

C++ Learning 👩‍💻
⚙️ std::any_of

В C++ функция std::any_of из <algorithm> проверяет, удовлетворяет ли хотя бы один элемент условию. Полезно для поиска значений, соответствующих критерию.

C++ Learning 👩‍💻
👩‍💻 Задача по C++

Напишите функцию findMedian для нахождения медианы в отсортированном массиве целых чисел. Функция должна корректно работать как с массивами чётной длины, так и с нечётной, и возвращать медиану в виде числа с плавающей точкой.

Пример:

std::vector<int> arr1 = {1, 3, 3, 6, 7, 8, 9};
std::vector<int> arr2 = {1, 2, 3, 4, 5, 6, 8, 9};

std::cout << findMedian(arr1) << std::endl; // Вернёт 6
std::cout << findMedian(arr2) << std::endl; // Вернёт 4.5


Решение задачи на картинке

C++ Learning 👩‍💻
Что будет выведено при выполнении кода?

Пояснение ⬇️
Указатель p указывает на второй элемент массива, и *(p + 2) обращается к четвертому элементу, что равно 4.

C++ Learning
👩‍💻
Вопрос на собеседовании

Что такое rvalue-ссылки в C++ и зачем они нужны?

Ответ ⬇️
Rvalue-ссылки (ссылки на временные объекты) позволяют захватывать и модифицировать временные объекты, избегая ненужного копирования данных. Они обозначаются как T&&. Основное применение rvalue-ссылок — это "перемещение" (move semantics), которое помогает оптимизировать работу с ресурсами. Вместо создания копии и переноса данных, можно использовать rvalue-ссылку и «переместить» содержимое, например, из одного контейнера в другой, обнулив исходный объект.

Пример использования ⚙️
#include <iostream>
#include <vector>

class MyClass {
public:
std::vector<int> data;

MyClass(std::vector<int> d) : data(std::move(d)) {} // перемещающий конструктор

MyClass(MyClass&& other) noexcept : data(std::move(other.data)) {
other.data.clear();
}
};

int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
MyClass obj1(std::move(numbers)); // перемещение данных из numbers в obj1

MyClass obj2(std::move(obj1)); // перемещение из obj1 в obj2
std::cout << "Размер obj1 после перемещения: " << obj1.data.size() << std::endl; // Размер obj1 после перемещения: 0
}


C++ Learning 👩‍💻
⚙️ std::all_of

В C++ функция std::all_of из <algorithm> проверяет, соответствуют ли все элементы заданному условию. Удобна для быстрой валидации содержимого контейнера.

C++ Learning 👩‍💻
➡️ GSL: Библиотека численных методов для C/C++ разработчиков

GSL – бесплатная библиотека для C и C++, включающая комплексные числа, матрицы, полиномы и анализ. Она проста в использовании, безопасна для многопоточности и не имеет зависимостей.

Поддержка множества математических операций.
Потокобезопасность и отсутствие зависимостей для надёжной интеграции в проекты.

🔗 Ссылочка на доку

C++ Learning 👩‍💻
⚙️ std::transform

В C++ функция std::transform из <algorithm> позволяет применить функцию к каждому элементу контейнера, создавая новый набор данных. Удобна для преобразования элементов на лету.

C++ Learning 👩‍💻