➡️ Использование
C++ Learning 👩💻
std::lcm и std::gcd для работы с наименьшим общим кратным и наибольшим общим делителемstd::lcm и std::gcd — это функции, добавленные в C++17, которые позволяют легко вычислить наименьшее общее кратное (НОК) и наибольший общий делитель (НОД) двух чисел. Они полезны при решении задач, связанных с арифметикой и оптимизацией.• Эти функции упрощают математические вычисления, делая код более чистым и надежным.C++ Learning 👩💻
➡️ Использование
C++ Learning 👩💻
std::ranges::views::filter и std::ranges::views::transform для обработки контейнеровstd::ranges::views::filter и std::ranges::views::transform — это инструменты, добавленные в C++20, позволяющие выполнять ленивую обработку контейнеров. Они позволяют фильтровать и изменять элементы контейнеров, не создавая новых копий.• Эти функции упрощают работу с контейнерами, делая код более выразительным и оптимизированным.C++ Learning 👩💻
➡️ Использование
C++ Learning 👩💻
std::unreachable для обозначения недостижимого кодаstd::unreachable — это новая функция, добавленная в C++23, позволяющая указать компилятору, что определенный участок кода недостижим. Это может улучшить оптимизацию кода и сделать его более читаемым, помогая избежать предупреждений компилятора о возможных путях выполнения.• std::unreachable полезен в ситуациях, когда вы уверены, что до определенного участка кода выполнение никогда не дойдет.C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое "RAII" (Resource Acquisition Is Initialization) и как это помогает в управлении ресурсами в C++?
Ответ ⬇️
"RAII" — это идиома, при которой инициализация объекта захватывает ресурс, а освобождение ресурса происходит автоматически при уничтожении объекта. Это гарантирует корректное освобождение ресурсов, таких как память или файловые дескрипторы, даже при исключениях.
🗣 Пример:
C++ Learning 👩💻
Что такое "RAII" (Resource Acquisition Is Initialization) и как это помогает в управлении ресурсами в C++?
Ответ ⬇️
🗣 Пример:
#include <iostream>
class File {
public:
File(const char* filename) {
file_ = fopen(filename, "w");
if (file_) {
std::cout << "Файл открыт.\n";
}
}
~File() {
if (file_) {
fclose(file_);
std::cout << "Файл закрыт.\n";
}
}
private:
FILE* file_;
};
int main() {
{
File file("example.txt");
// Работа с файлом
} // Файл автоматически закроется при выходе из блока
// Результат выполнения:
// Файл открыт.
// Файл закрыт.
}
C++ Learning 👩💻
➡️ Использование библиотеки Dragonbox для быстрого и точного преобразования чисел с плавающей точкой в строку
Dragonbox — это современная библиотека C++, которая обеспечивает чрезвычайно быстрое и точное преобразование чисел с плавающей точкой (float и double) в строковое представление. Она гарантирует корректность округления, что делает её отличным выбором для высокопроизводительных приложений.
🔗 Ссылочка на доку
C++ Learning 👩💻
Dragonbox — это современная библиотека C++, которая обеспечивает чрезвычайно быстрое и точное преобразование чисел с плавающей точкой (float и double) в строковое представление. Она гарантирует корректность округления, что делает её отличным выбором для высокопроизводительных приложений.
• Dragonbox полезен при разработке приложений, требующих работы с числовыми данными и их преобразования в строковый формат.🔗 Ссылочка на доку
C++ Learning 👩💻
➡️ Использование
C++ Learning 👩💻
std::expected для обработки ошибок без исключенийstd::expected — это новый шаблонный класс, добавленный в C++23, который предоставляет способ возвращать либо ожидаемое значение, либо информацию об ошибке. Он позволяет более эффективно обрабатывать ошибки без использования исключений, делая код более чистым и понятным.• std::expected полезен, когда нужно явно работать с ошибками, избегая накладных расходов и сложностей, связанных с исключениями.C++ Learning 👩💻
➡️ Использование библиотеки NanoRange для работы с диапазонами в стиле C++20
NanoRange приносит функциональность диапазонов (Ranges) из C++20 в более ранние версии стандарта C++.
Она позволяет использовать удобные и гибкие инструменты для работы с последовательностями, такими как фильтрация, трансформация и ленивые вычисления, что делает код более чистым и выразительным.
🔗 Ссылочка на доку
C++ Learning 👩💻
NanoRange приносит функциональность диапазонов (Ranges) из C++20 в более ранние версии стандарта C++.
Она позволяет использовать удобные и гибкие инструменты для работы с последовательностями, такими как фильтрация, трансформация и ленивые вычисления, что делает код более чистым и выразительным.
• NanoRange идеально подходит для проектов, работающих на стандартах C++11, C++14 или C++17, но желающих использовать преимущества std::ranges.🔗 Ссылочка на доку
C++ Learning 👩💻
❓ Вопрос на собеседовании
Как работает RVO (Return Value Optimization) в C++, и в каких случаях оно не применяется?
Ответ ⬇️
RVO — это оптимизация, при которой компилятор устраняет временные объекты, возвращаемые из функции, что значительно снижает накладные расходы на создание копий. Однако, есть ситуации, когда RVO не применяется, например, при возврате различных объектов в зависимости от условий внутри функции.
🗣 Пример:
C++ Learning 👩💻
Как работает RVO (Return Value Optimization) в C++, и в каких случаях оно не применяется?
Ответ ⬇️
🗣 Пример:
#include <iostream>
struct MyObject {
MyObject() { std::cout << "Создан объект\n"; }
MyObject(const MyObject&) { std::cout << "Скопирован объект\n"; }
MyObject(MyObject&&) { std::cout << "Перемещён объект\n"; }
};
MyObject createObject(bool flag) {
if (flag) {
return MyObject(); // RVO применяется
} else {
MyObject obj;
return obj; // RVO может не применяться
}
}
int main() {
MyObject obj1 = createObject(true);
MyObject obj2 = createObject(false);
}
C++ Learning 👩💻
➡️ Использование
C++ Learning 👩💻
std::barrier для синхронизации потоковstd::barrier — это новый примитив синхронизации, добавленный в C++20, который позволяет координировать выполнение группы потоков. Каждый поток выполняет свою работу до определенной точки (барьера) и ждет, пока все остальные потоки достигнут этой же точки, после чего выполнение продолжается.• std::barrier полезен в параллельных вычислениях, где важно, чтобы все потоки завершили определенную задачу перед переходом к следующей.C++ Learning 👩💻
➡️ Использование библиотеки async_simple для работы с асинхронностью в C++
async_simple — это новая библиотека, которая предоставляет простой и эффективный способ работы с асинхронными операциями в C++. Она упрощает управление асинхронными задачами, улучшая читабельность и производительность кода.
🔗 Ссылочка на доку
C++ Learning 👩💻
async_simple — это новая библиотека, которая предоставляет простой и эффективный способ работы с асинхронными операциями в C++. Она упрощает управление асинхронными задачами, улучшая читабельность и производительность кода.
• async_simple идеально подходит для тех, кто хочет писать асинхронный код без сложных шаблонов и лишних зависимостей.🔗 Ссылочка на доку
C++ Learning 👩💻
➡️ Использование библиотеки cppcoro для работы с корутинами в C++
cppcoro — это библиотека, предоставляющая набор инструментов для работы с корутинами в C++, включая асинхронные операции, таймеры, семафоры и другие примитивы синхронизации. Это упрощает написание асинхронного кода с поддержкой корутин, обеспечивая высокую производительность и читаемость.
🔗 Ссылочка на доку
C++ Learning 👩💻
cppcoro — это библиотека, предоставляющая набор инструментов для работы с корутинами в C++, включая асинхронные операции, таймеры, семафоры и другие примитивы синхронизации. Это упрощает написание асинхронного кода с поддержкой корутин, обеспечивая высокую производительность и читаемость.
• cppcoro — отличный выбор для создания высокопроизводительных асинхронных приложений с использованием корутин.🔗 Ссылочка на доку
C++ Learning 👩💻
❓ Вопрос на собеседовании
Как работает Rule of Five в C++ и когда его следует применять?
Ответ ⬇️
Rule of Five говорит о том, что если ваш класс управляет ресурсами, вам нужно явно определить пять специальных методов: конструктор копирования, оператор присваивания копированием, конструктор перемещения, оператор присваивания перемещением и деструктор. Это важно, чтобы избежать утечек ресурсов или неправильного управления памятью при копировании или перемещении объектов.
C++ Learning 👩💻
Как работает Rule of Five в C++ и когда его следует применять?
Ответ ⬇️
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
31 октября в Москве пройдёт первая конференция по Telegram от крупнейшего сервиса аналитики Telemetr. Топы Телеграм-рынка, маркетологи и представители бизнеса обсудят самые актуальные тенденции и перспективы развития платформы Telegram.
Присоединиться к мероприятию можно будет и онлайн. Тут найдёте всю информацию - https://telemetr.pro.
На конференции вас ждут:
- 20+ опытных спикеров
- 1000+ онлайн и офлайн участников
- две сцены
- нетворкинг активности
- лаунж зона
- вкусный фуршет
- яркое afterparty в PAPA Moscow
Спикерами главной сцены будут: Артемий Лебедев, руководитель Telemetr - Денис Ларионов, основатель агентства GoDigital - Сурен Альбертян, основатель Сидорин ЛАБ - Дмитрий Сидорин и многие другие!
За подробностями сюда - https://telemetr.pro
А купить билет со скидкой в 10% можно, использовав наш промокод - TMConf10
Купить билет - https://telemetr.pro
➡️ Использование
В отличие от
C++ Learning 👩💻
std::flat_map для оптимизации производительностиstd::flat_map — это структура данных, которая представляет собой ассоциативный контейнер, хранящий пары "ключ-значение" в упорядоченном виде с использованием вектора.В отличие от
std::map, std::flat_map оптимизирован для случаев, когда количество элементов невелико, так как хранение данных в последовательной области памяти снижает накладные расходы и улучшает кэширование.• std::flat_map полезен для приложений, где требуется высокая производительность при небольших объемах данных и частых поисках.C++ Learning 👩💻
➡️ Использование
C++ Learning 👩💻
std::latch для синхронизации потоковstd::latch — это примитив синхронизации, который позволяет одному или нескольким потокам ожидать, пока другие потоки не завершат выполнение. В отличие от std::barrier, он не перезагружается после достижения условия синхронизации, что делает его полезным для одноразовой координации.• std::latch полезен в ситуациях, когда необходимо, чтобы один поток ждал завершения других потоков.C++ Learning 👩💻
➡️ Использование библиотеки cista для сериализации данных в C++
cista — это легковесная библиотека для эффективной бинарной и текстовой сериализации данных. Она обеспечивает высокую производительность и минимальные накладные расходы, делая её идеальной для сохранения состояния и передачи данных.
🔗 Ссылочка на доку
C++ Learning 👩💻
cista — это легковесная библиотека для эффективной бинарной и текстовой сериализации данных. Она обеспечивает высокую производительность и минимальные накладные расходы, делая её идеальной для сохранения состояния и передачи данных.
• cista — отличный выбор для разработчиков, которым нужна эффективная сериализация больших объемов данных без лишней сложности.🔗 Ссылочка на доку
C++ Learning 👩💻
❓ Вопрос на собеседовании
Что такое "SFINAE" (Substitution Failure Is Not An Error) в C++, и как он применяется в шаблонном программировании?
Ответ ⬇️
SFINAE — это принцип C++, при котором ошибка подстановки шаблонных параметров не приводит к ошибке компиляции, а просто игнорирует неудачные варианты. Это используется для создания разных реализаций шаблонных функций в зависимости от типов.
Пример использования ⚙️
C++ Learning 👩💻
Что такое "SFINAE" (Substitution Failure Is Not An Error) в 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 👩💻