С++ задачи и вопросы
562 subscribers
543 photos
4 files
203 links
Задачи, тесты и теоретические вопросы по С++

Прислать задачу/вопрос в дар: @cyberJohnny
Сотрудничество: @cyberJohnny
Download Telegram
🤔 Как это работает? — Передача аргументов в C++

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

➡️ Как это работает:

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

Развернутый аналог:
void modifyValue(const int &value) {
// value нельзя изменить
}

👩‍💻

@quizcpp
🔥1
⚙️ std::ofstream

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

👩‍💻

@quizcpp
⚙️ std::byte

std::byte из заголовка предоставляет тип для работы с данными на уровне байтов. Это полезно для низкоуровневой работы с памятью и сетевыми протоколами.

👩‍💻

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

Как работает std::atomic в C++, и в чём его преимущество перед обычными переменными в многопоточном программировании?

Ответ ⬇️
std::atomic — это шаблонный класс из библиотеки , который предоставляет атомарные операции с переменными, гарантируя их безопасность в многопоточной среде. Используя атомарные операции, вы избегаете гонок данных без необходимости явно использовать мьютексы.

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

std::atomic counter(0);

void increment() {
for (int i = 0; i < 1000; ++i) {
counter.fetch_add(1);
}
}

int main() {
std::thread t1(increment);
std::thread t2(increment);

t1.join();
t2.join();

std::cout

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

Как работает std::atomic в C++, и в чём его преимущество перед обычными переменными в многопоточном программировании?

Ответ ⬇️
std::atomic — это шаблонный класс из библиотеки , который предоставляет атомарные операции с переменными, гарантируя их безопасность в многопоточной среде. Используя атомарные операции, вы избегаете гонок данных без необходимости явно использовать мьютексы.

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

std::atomic counter(0);

void increment() {
for (int i = 0; i < 1000; ++i) {
counter.fetch_add(1);
}
}

int main() {
std::thread t1(increment);
std::thread t2(increment);

t1.join();
t2.join();

std::cout

@quizcpp
🚫 Антипаттерн недели: Использование явных циклов для поиска в контейнерах

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

✔️ Используйте алгоритмы из , такие как std::find, чтобы упростить код и улучшить читаемость.

👩‍💻

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

Что такое 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
⚙️ std::atomic_flag

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

👩‍💻

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

Что такое 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
⚙️ std::chrono::steady_clock

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

👩‍💻

@quizcpp
🔥1
⚙️ std::barrier

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

👩‍💻

@quizcpp
Пару недель назад мы обсуждали с коллегами, что digital-рынок стал похож на перегретый стартап:
новые инструменты, новые фреймворки, новые ИИ-решения — а времени разбираться во всём этом меньше, чем когда-либо.

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

В итоге несколько авторов digital-каналов решили объединиться и собрать всё полезное в одну папку — «Документы для тех, кто в digital»


🔴 Там 30 файлов, которые помогают выстроить управление, аналитику и внутренние процессы:

– Система мотивации сотрудников в диджитал на 2026 год,

– 4 шаблона основых документов любого ИТ проекта,

– Топ-6 промптов для создания контента,

– Шаблоны отчётов, которые помогают удерживать клиента,

– Чек-лист по GEO оптимизации сайта и контента.


Сохранив единожды папку «Документы для тех, кто в digital», вы сможете спокойно пройтись по всем каналам и скачать множество авторских документов, которые точно пригодятся в работе.


📂 Ссылка на папку: https://t.me/addlist/yXbxnD0CjS84MzBi

А чтобы добавить немного азарта — среди подписавшихся разыграют:

🥇 iPhone Air;
🥈 Яндекс Станцию Лайт 2;
🥉 HUAWEI Freebuds 5.

Как участвовать:

1. Подпишись на папку: https://t.me/addlist/yXbxnD0CjS84MzBi
2. Подтверди участие в боте

🗓 Итоги — 25 октября.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
⚙️ std::monostate

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

👩‍💻

@quizcpp
Готовы с нуля создавать телекоммуникационные решения для беспроводных мобильных сетей и сопутствующих услуг? 🧑‍💻

Отправляйте резюме до 19 октября и присоединяйтесь к команде YADRO Телеком!

Как получить оффер за 3 дня? Листайте карточки выше — все подробности там!

💙 Оставляйте заявку — мы ждём именно вас!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос на собеседовании

Что такое 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