TGViewer
Channel Public Channel
С++ задачи и вопросы

С++ задачи и вопросы

@quizcpp

Задачи, тесты и теоретические вопросы по С++

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Subscribers
554
Photos
585
Videos
0
Links
212

Showing posts older than #1653 · Back to latest

Older Posts 20 shown
Post #1652 132
⚙️ std::condition_variable

Класс std::condition_variable в C++ предоставляет механизм для синхронизации потоков, позволяя одному потоку ждать, пока другой поток уведомит его о наступлении определенного события. Это полезно для координации работы нескольких потоков в многопоточных приложениях.

👩‍💻

@quizcpp
Post #1651 121
🚫 Антипаттерн недели: Использование new и delete вместо smart pointers

В C++ ручное управление памятью с new и delete может привести к утечкам памяти, неопределённому поведению и ошибкам двойного освобождения.

✔️ Используйте std::unique_ptr или std::shared_ptr из , которые автоматически освобождают ресурсы при выходе из области видимости.

👩‍💻

@quizcpp
  • 👍 1
Post #1650 124
⚙️ std::scope_exit

std::scope_exit из заголовка (C++23) позволяет автоматически выполнять код при выходе из области видимости. Это полезно для освобождения ресурсов и отмены операций без try/catch.

👩‍💻

@quizcpp
Post #1648 112
⚙️ std::format

Метод std::format из заголовка (C++20) предоставляет удобный способ форматирования строк, аналогичный printf, но с безопасностью типов и читаемым синтаксисом.

👩‍💻

@quizcpp
  • 🔥 1
Post #1647 118
⚙️ std::stop_token

std::stop_token из (C++20) предоставляет механизм мягкой остановки потоков, позволяя безопасно завершать их работу без принудительного прерывания. Это удобная альтернатива std::atomic или std::condition_variable для управления потоками.

👩‍💻

@quizcpp
  • 🔥 1
Post #1646 123
⚙️ std::atomic_wait / std::atomic_notify_one

Методы std::atomic_wait и std::atomic_notify_one (C++20) позволяют эффективно синхронизировать потоки без активного ожидания (busy-waiting). Они приостанавливают выполнение потока, пока значение атомарной переменной не изменится.

👩‍💻

@quizcpp
Post #1645 114
⚙️ std::mdspan

std::mdspan из заголовка (C++23) — это многомерный представляемый вид массива, который позволяет безопасно работать с данными без копирования. Это мощный инструмент для работы с матрицами, тензорами и буферами.

👩‍💻

@quizcpp
Post #1644 123
⚙️ std::atomic_ref

std::atomic_ref из заголовка (C++20) позволяет работать с существующей переменной как с атомарной без копирования. Это полезно в многопоточных программах, когда нужно безопасно обновлять данные без защиты мьютексами.

👩‍💻

@quizcpp
Post #1643 102
⚙️ std::span

std::span из заголовка (C++20) представляет собой некопируемый, безопасный для диапазонов представление массива. Он удобен для работы с массивами, векторами и буферами без создания лишних копий.

👩‍💻

@quizcpp
Post #1642 111
⚙️ std::optional

Класс std::optional предоставляет удобный способ работы с значениями, которые могут отсутствовать. Вместо использования "магических" значений (например, -1 или nullptr) или исключений, std::optional явно указывает на наличие или отсутствие данных.

👩‍💻

@quizcpp
Post #1641 187
🚫 Антипаттерн недели: Использование endl вместо \n в циклах

В C++ std::endl не просто переносит строку, но также принудительно сбрасывает буфер вывода, что замедляет выполнение кода в циклах. При частом использовании в больших программах это может значительно снизить производительность.

✔️ Используйте "\n" вместо std::endl, чтобы избежать ненужного сброса буфера и ускорить вывод.

👩‍💻

@quizcpp
Post #1640 99
❓ Вопрос на собеседовании

Как работает zero-cost exceptions в C++ и почему они эффективны?

Ответ ⬇️
Zero-cost exceptions означают, что во время нормального выполнения кода исключения не влияют на производительность. Вместо проверок компилятор создаёт таблицы (.eh_frame в ELF), которые используются только при выбросе исключения. В отличие от if-проверок ошибок, исключения C++ не замедляют код, пока не происходит ошибка.

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

void risky() { throw std::runtime_error("Ошибка!"); }

int main() {
try { risky(); }
catch (const std::exception& e) { std::cout

@quizcpp
Post #1639 102
⚙️ std::move_iterator

Итератор std::move_iterator позволяет преобразовать обычный итератор в итератор, который перемещает элементы вместо их копирования. Это особенно полезно при работе с контейнерами, содержащими "тяжелые" объекты, такие как std::string или std::vector, чтобы избежать лишних копирований.

👩‍💻

@quizcpp
Post #1637 104
❓ Вопрос на собеседовании

Что такое Placement new в C++ и как оно используется?

Ответ ⬇️
Placement new — это форма оператора new, которая позволяет разместить объект в заранее выделенной области памяти. Вместо выделения памяти на куче, как это делает обычный new, placement new создаёт объект в памяти, адрес которой передаётся в качестве аргумента.

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

Пример использования ⚙️
#include
#include // Для placement new

int main() {
alignas(alignof(int)) char buffer[sizeof(int)]; // Буфер для хранения объекта
int* ptr = new (buffer) int(42); // Размещение объекта в buffer

std::cout

@quizcpp
Post #1630 111
⚙️ std::monostate

std::monostate из заголовка используется как «пустой» тип внутри std::variant. Это полезно для добавления незначимого состояния, которое можно обработать отдельно.

👩‍💻

@quizcpp
Post #1628 101
⚙️ std::barrier

std::barrier из заголовка (доступно с C++20) синхронизирует выполнение потоков, ожидая, пока все участники не достигнут определённой точки (барьера). Это полезно для координации действий в многопоточных приложениях.

👩‍💻

@quizcpp
Post #1627 100
⚙️ std::chrono::steady_clock

std::chrono::steady_clock из заголовка представляет часы с монотонным ходом, которые никогда не корректируются. Это полезно для измерения времени выполнения или задержек.

👩‍💻

@quizcpp
  • 🔥 1
Post #1626 101
❓ Вопрос на собеседовании

Что такое constexpr в C++ и в чём его отличие от const?

Ответ ⬇️
constexpr — это спецификатор в C++, который указывает, что значение выражения или функции может быть вычислено на этапе компиляции, если это возможно. В отличие от const, который просто запрещает изменение значения, constexpr гарантирует, что вычисления происходят на этапе компиляции (при условии, что все входные данные известны на этом этапе).

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

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

constexpr int square(int x) {
return x * x; // Вычисляется на этапе компиляции
}

int main() {
constexpr int result = square(5); // Результат вычислен на этапе компиляции
std::cout

@quizcpp
Post #1625 100
⚙️ std::atomic_flag

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

👩‍💻

@quizcpp
Post #1624 109
❓ Вопрос на собеседовании

Что такое std::allocator в C++, и как его можно использовать для управления памятью?

Ответ ⬇️
std::allocator — это стандартный шаблонный класс, предоставляющий низкоуровневые инструменты для управления памятью в STL-контейнерах. Он позволяет настраивать аллокацию памяти, предоставляя методы для выделения, освобождения и построения объектов.

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

int main() {
std::allocator allocator;

// Выделяем память для 3 целых чисел
int* arr = allocator.allocate(3);

// Конструируем элементы
allocator.construct(arr, 10);
allocator.construct(arr + 1, 20);
allocator.construct(arr + 2, 30);

// Выводим значения
for (int i = 0; i < 3; ++i) {
std::cout

@quizcpp
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →