Библиотека задач по C++ | тесты, код, задания
5.46K subscribers
1.02K photos
5 videos
313 links
Задачи и тесты по C++ для тренировки и обучения.

Как запустить своего ии-агента: https://clc.to/tvpmDQ

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/7a480301

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
🏆 Задача на выходные: string_view vs string в API

Перед тобой два варианта API логгера. Выбери лучший и обоснуй. Нет единственно верного ответа — важна аргументация.

#include <string>
#include <string_view>

// Вариант А
class LoggerA {
public:
void log(const std::string& msg);
void setPrefix(const std::string& prefix);
std::string getLastMessage() const;
};

// Вариант Б
class LoggerB {
public:
void log(std::string_view msg);
void setPrefix(std::string_view prefix);
std::string_view getLastMessage() const;
};

// Контекст использования:
// 1. log() вызывается тысячи раз в секунду
// 2. setPrefix() — один раз при старте
// 3. getLastMessage() — для диагностики
// 4. Логгер хранит последнее сообщение внутри



✏️ Напиши в комментариях: какой метод в каком варианте правильный, а какой — нет. Предложи «идеальный» LoggerC.


📍Навигация: ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#константная_правильность
Please open Telegram to view this post
VIEW IN TELEGRAM
‼️ Задача на выходные

Этот код содержит баг. Необходимо найди его:

#include <ranges>
#include <vector>
#include <iostream>
#include <algorithm>

int main() {
std::vector<int> vec = { 5, 3, 1, 4, 2 };

auto sorted_view = vec
| std::views::transform([](int x) { return x; });

std::ranges::sort(sorted_view);

for (auto v : sorted_view) {
std::cout << v << " ";
}
}


Подсказка: views::transform возвращает prvalue. Можно ли сортировать такой view?

Отсортируется ли vec? Если нет — какая ошибка компиляции и почему?


📍Навигация:
ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
‼️ Задача на выходные: lock_guard

Проведи ревью кода и найди проблему (если она есть😉).

#include <mutex>
#include <thread>
#include <vector>
#include <iostream>

std::mutex mtx;
std::vector<int> data;

void producer() {
for (int i = 0; i < 100; ++i) {
std::lock_guard<std::mutex> lock(mtx);
data.push_back(i);
}
}

void consumer() {
while (true) {
std::lock_guard<std::mutex> lock(mtx);
if (data.empty()) {
// Ждём данные...
std::this_thread::sleep_for(
std::chrono::milliseconds(10));
continue;
}
std::cout << data.back() << "\n";
data.pop_back();
}
}


Вопрос: что не так с consumer()? Почему lock_guard здесь — плохой выбор и как это исправить?


📍Навигация:
ВакансииЗадачиСобесы

Библиотека C/C++ разработчика

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🍄 Задача на выходные: найди баг

Коллега написал таймаут для сетевого запроса и клянётся, что «иногда он срабатывает мгновенно, а иногда висит вечно». Особенно после перевода часов. Найдёшь причину?

#include <chrono>
using namespace std::chrono;

bool wait_for_response(Connection& conn, int timeout_ms) {
auto deadline = system_clock::now() + milliseconds(timeout_ms);
while (system_clock::now() < deadline) {
if (conn.has_data()) return true;
std::this_thread::sleep_for(milliseconds(10));
}
return false;
}


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


✏️ Делись решением в комментариях ⤵️


📍Навигация:
ВакансииЗадачи Собесы

Библиотека C/C++ разработчика

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
1