С++ задачи и вопросы
572 subscribers
513 photos
4 files
199 links
Задачи, тесты и теоретические вопросы по С++

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Download Telegram
spaceship operator

Spaceship operator () — это оператор сравнения, введенный в C++20.

Преимущества spaceship operator:
— Позволяет создавать типы, которые можно сравнивать с помощью одного оператора вместо нескольких (==, !=, и т. д.).
— Упрощает написание функций сравнения, например std::sort.
— Читабельнее и компактнее кода с традиционными операторами сравнения.

👩‍💻

@quizcpp
#вопросы_с_собеседований
Что такое атомарная операция?

Атомарная операция — это операция, которая выполняется как одна неделимая инструкция.

Атомарность гарантирует, что при выполнении такой операции никакая другая нить или процесс не сможет получить доступ к изменяемым данным.
Например, инкремент или декремент числовой переменной является атомарной операцией. Чтение и запись указателя также происходит атомарно.

Атомарность важна в многопоточном программировании — она позволяет избежать гонок данных при обращении разных потоков к общим данным.

👩‍💻

@quizcpp
#вопросы_с_собеседований
Какая разница между std::map и std::unordered_map?

std::map — это ассоциативный контейнер на основе красно-черного дерева. Элементы хранятся в отсортированном порядке по ключу. Сложность операций O(log N).

std::unordered_map реализован как хеш-таблица. Элементы хранятся в произвольном порядке. В среднем сложность операций O(1).

Основные различия между std::map и std::unordered_map:

— Поиск, вставка и удаление в std::map за O(log N) в худшем случае. В std::unordered_map за O(1) в среднем.
— Итераторы std::map позволяют перебирать элементы в отсортированном порядке. Порядок элементов std::unordered_map произвольный.
— Map поддерживает бинарный поиск lower_bound(), upper_bound(), а unordered_map — нет.
— В unordered_map нельзя использовать указатели в качестве ключей в хеш-таблице. В map можно.

👩‍💻

@quizcpp
👍1
➡️ Использование библиотеки Dragonbox для быстрого и точного преобразования чисел с плавающей точкой в строку

Dragonbox — это современная библиотека C++, которая обеспечивает чрезвычайно быстрое и точное преобразование чисел с плавающей точкой (float и double) в строковое представление. Она гарантирует корректность округления, что делает её отличным выбором для высокопроизводительных приложений.

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

🔗 Ссылочка на доку (https://github.com/jk-jeon/dragonbox)

👩‍💻

@quizcpp
🔥1
Вопрос на собеседовании

Что такое "RAII" (Resource Acquisition Is Initialization) и как это помогает в управлении ресурсами в C++?

Ответ ⬇️
"RAII" — это идиома, при которой инициализация объекта захватывает ресурс, а освобождение ресурса происходит автоматически при уничтожении объекта. Это гарантирует корректное освобождение ресурсов, таких как память или файловые дескрипторы, даже при исключениях.

🗣 Пример:
#include

class File {
public:
File(const char* filename) {
file_ = fopen(filename, "w");
if (file_) {
std::cout

@quizcpp
➡️ Использование библиотеки NanoRange для работы с диапазонами в стиле C++20

NanoRange приносит функциональность диапазонов (Ranges) из C++20 в более ранние версии стандарта C++.

Она позволяет использовать удобные и гибкие инструменты для работы с последовательностями, такими как фильтрация, трансформация и ленивые вычисления, что делает код более чистым и выразительным.

• NanoRange идеально подходит для проектов, работающих на стандартах C++11, C++14 или C++17, но желающих использовать преимущества std::ranges.

🔗 Ссылочка на доку (https://github.com/tcbrindle/NanoRange)

👩‍💻

@quizcpp
➡️ Использование библиотеки immer для работы с неизменяемыми структурами данных в C++

immer позволяет создавать и изменять структуры данных без изменения исходных объектов, что полезно в многопоточных и функциональных программах.

• immer делает работу с данными безопаснее и эффективнее, особенно в многопоточной среде.

🔗 Ссылочка на доку (https://github.com/arximboldi/immer)

👩‍💻

@quizcpp
C++_cheatsheet.pdf.pdf
29.4 KB
Шпаргалка по С++

👩‍💻

@quizcpp
🔥2
ETL

ETL (Embedded Template Library) — это библиотека шаблонов для C++, предназначенная для использования во встраиваемых системах. В отличие от стандартной библиотеки шаблонов (STL), ETL фокусируется на эффективном использовании ресурсов при работе с ограниченной памятью микроконтроллеров.

👩‍💻

@quizcpp
🔥1
Библиотека Range-v3

Библиотека Range-v3 (range-v3) в C++ представляет собой набор инструментов для работы с диапазонами элементов.

Диапазон — это обобщенное понятие, которое охватывает различные коллекции данных, такие как массивы, вектора, списки и строки.

👩‍💻

@quizcpp
🔥1
➡️ Использование std::flat_map для оптимизации производительности

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

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

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

👩‍💻

@quizcpp
➡️ Использование std::latch для синхронизации потоков

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

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

👩‍💻

@quizcpp
🔥1
➡️ Использование библиотеки Glaze для сериализации данных в C++

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

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

🔗 Ссылочка на доку (https://github.com/stephenberry/glaze)

👩‍💻

@quizcpp
🔥1
⚙️ std::transform

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

👩‍💻

@quizcpp
⚙️ std::forward

Функция std::forward из заголовка используется для реализации идеальной передачи (perfect forwarding) аргументов в шаблонных функциях. Она позволяет сохранить категорию значения (lvalue или rvalue) передаваемого аргумента, что особенно полезно при написании обобщённого кода.

👩‍💻

@quizcpp
Вопрос на собеседовании

Как работает RVO (Return Value Optimization) в C++, и в каких случаях оно не применяется?

Ответ ⬇️
RVO — это оптимизация, при которой компилятор устраняет временные объекты, возвращаемые из функции, что значительно снижает накладные расходы на создание копий. Однако, есть ситуации, когда RVO не применяется, например, при возврате различных объектов в зависимости от условий внутри функции.

🗣 Пример:
#include

struct MyObject {
MyObject() { std::cout

@quizcpp
➡️ Использование библиотеки async_simple для работы с асинхронностью в C++

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

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

🔗 Ссылочка на доку (https://github.com/alibaba/async_simple)

👩‍💻

@quizcpp
➡️ Использование библиотеки cppcoro для работы с корутинами в C++

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

• cppcoro — отличный выбор для создания высокопроизводительных асинхронных приложений с использованием корутин.

🔗 Ссылочка на доку (https://github.com/lewissbaker/cppcoro)

👩‍💻

@quizcpp
🔥1