❤6👍6🔥5
Корутины — это функции, выполнение которых можно приостанавливать и продолжать. Они позволяют писать асинхронный и ленивый код без громоздких колбэков и сложного состояния.
Что важно знать:
• Три ключевых оператора: co_await, co_yield, co_return.
• Можно создавать генераторы, которые возвращают значения по одному.
• Асинхронные функции выглядят как обычные — без вложенности и запутанных цепочек вызовов.
Это мощный инструмент современного C++, который легко интегрируется с другими фичами языка.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍8❤6🤝1
Останавливаем потоки безопасно с std::jthread
Сейчас научимся правильно завершать потоки в C++. Без
Для начала подключим библиотеки. Чтобы код был короче, добавим using namespace std:
Теперь напишем рабочую функцию. Она будет печатать счётчик каждую секунду. Когда придёт сигнал остановки, поток завершится сам:
Запускаем поток через
Вот что выведет программа:
🔥 Таким образом ты можешь писать потоки проще — с автоматическим управлением и встроенной остановкой.
📣 C++ Ready | #практика
Сейчас научимся правильно завершать потоки в C++. Без
detach
, без ручного join
, без флагов. Для начала подключим библиотеки. Чтобы код был короче, добавим using namespace std:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
Теперь напишем рабочую функцию. Она будет печатать счётчик каждую секунду. Когда придёт сигнал остановки, поток завершится сам:
void worker(stop_token st) {
int tick = 0;
while (!st.stop_requested()) {
cout << "Tick " << tick++ << '\n';
this_thread::sleep_for(chrono::seconds(1));}
cout << "Поток завершён корректно.\n";
}
Запускаем поток через
jthread
. Ждём немного и просим его остановиться. Никаких join()
вызывать не нужно — всё делается автоматически:int main() {
jthread t(worker);
this_thread::sleep_for(chrono::seconds(3));
t.request_stop();
}
Вот что выведет программа:
Tick 0
Tick 1
Tick 2
Поток завершён корректно.
🔥 Таким образом ты можешь писать потоки проще — с автоматическим управлением и встроенной остановкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥10👍8😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7❤6😁1
В этой задаче создаём консольную утилиту, которая переводит числовое значение из одной единицы измерения в другую прямо из терминала.
В этой задаче:
• Принимаем на вход 3 аргумента — число, исходную единицу и целевую единицу.
• Проверяем, что обе единицы входят в список поддерживаемых (m, cm, km, g, kg, l, ml).
• Используем unordered_map с коэффициентами и сначала переводим значение в базовую единицу, затем — в нужную.
Такой инструмент удобен, когда нужно быстро пересчитать метры в сантиметры, граммы в килограммы или литры в миллилитры, не покидая командную строку.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍7❤6🤝1
Убираем все пробелы из строки!
Сейчас научимся быстро удалять все пробельные символы (
Сначала подключим необходимые библиотеки из стандартной поставки:
Допустим, у нас есть строка с лишними пробелами и табуляцией:
Теперь удалим все пробельные символы с помощью одного вызова:
Результат при запуске программы:
🔥 Таким образом ты можешь быстро очищать строки от пробелов — без циклов, копий и лишнего кода.
📣 C++ Ready | #практика
Сейчас научимся быстро удалять все пробельные символы (
пробел
, таб
, перевод строки
) из строки. Это пригодится при парсинге ввода, чтении конфигов или очистке текстовых данных.Сначала подключим необходимые библиотеки из стандартной поставки:
#include <string>
#include <algorithm> // std::erase_if (C++20)
#include <cctype> // std::isspace
Допустим, у нас есть строка с лишними пробелами и табуляцией:
std::string raw = " Hello\tWorld \n ";
Теперь удалим все пробельные символы с помощью одного вызова:
std::erase_if(raw, [](unsigned char c) {
return std::isspace(c);
});
std::cout << raw << '\n';
Результат при запуске программы:
HelloWorld
🔥 Таким образом ты можешь быстро очищать строки от пробелов — без циклов, копий и лишнего кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥10👍8
С его помощью можно легко получать расширение файла, имя без пути, родительский каталог, заменять расширение, а также работать с путём в системном формате. Полезно при создании утилит, обработке файлов и написании кроссплатформенного кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍9❤7🤝5