❤5👍4🔥3
Сегодня покажу, как получать байты, задавать фиксированные размеры и передавать диапазоны в алгоритмы без лишних усилий.
Что важно знать:
• Байтный вид быстро;
• Фиксированная длина экономит;
• Легко сортировать напрямую.
Это продолжение прошлого гайда
— теперь
span
раскроется на полную силу.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍5❤4
Асинхронное чтение файлов с std::async!
Иногда нужно загрузить сразу несколько больших файлов без блокировки основного потока — например, при подготовке ресурсов для приложения или анализа логов.
С
Вызовем чтение сразу двух файлов параллельно и дождёмся результата:
🔥 Таким образом вы распараллеливаете I/O-операции без явных потоков или сложных библиотек. Как только оба
📣 C++ Ready | #практика
Иногда нужно загрузить сразу несколько больших файлов без блокировки основного потока — например, при подготовке ресурсов для приложения или анализа логов.
С
std::async
это делается парой строк и возвращающимся std::future
.#include <fstream>
#include <future>
#include <string>
// Читает весь файл в строку
std::string readFile(const std::string& path) {
std::ifstream in(path);
return { std::istreambuf_iterator<char>(in), {} };
}
Вызовем чтение сразу двух файлов параллельно и дождёмся результата:
auto fut1 = std::async(std::launch::async, readFile, "config.json");
auto fut2 = std::async(std::launch::async, readFile, "data.log");
// Здесь можно выполнять другие задачи...
std::string config = fut1.get();
std::string logs = fut2.get();
🔥 Таким образом вы распараллеливаете I/O-операции без явных потоков или сложных библиотек. Как только оба
future
будут готовы, вызов get()
вернёт содержимое файлов.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥3
Позволяет мгновенно обновлять элементы и считать сумму на любом префиксе за логарифм времени.
Что важно знать:
• Хранит частичные куски;
• Обновляет несколько позиций;
• Быстро считает префиксы.
Дерево Фенвика удобно, просто реализуется и эффективно решает задачи с частыми обновлениями и запросами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤4👍4
Умные указатели и static_pointer_cast: безопасный кастинг!
Когда у вас есть
Здесь
Теперь выполним кастинг и вызовем методы производного класса:
🔥 Это позволяет безопасно преобразовать
📣 C++ Ready | #практика
Когда у вас есть
std::shared_ptr<Base>
, который на самом деле указывает на объект Derived
, можно безопасно «опустить» указатель до производного типа:#include <memory>
#include <iostream>
struct Base {
virtual ~Base() = default;
virtual void info() { std::cout << "Base\n"; }};
struct Derived : Base {
void specific() { std::cout << "Derived specific\n"; }};
auto basePtr = std::make_shared<Derived>();
// shared_ptr<Base> на Derived
Здесь
basePtr
действительно содержит Derived
, но тип хранится как shared_ptr<Base>
.Теперь выполним кастинг и вызовем методы производного класса:
auto derivedPtr = std::static_pointer_cast<Derived>(basePtr);
derivedPtr->specific(); // Derived specific
derivedPtr->info();
// Base, метод из базового класса
🔥 Это позволяет безопасно преобразовать
shared_ptr
между совместимыми типами и избежать небезопасных C-стиля кастов и проверок на nullptr
.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥3👎1
This media is not supported in your browser
VIEW IN TELEGRAM
|- - -
|
|- - -
|
|- - -
|
|- - -
|
|- - -
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2❤1🔥1
Утилита пригодится, если нужно быстро извлечь текст из скриншота, фото или PDF-страницы.
Что важно знать:
• Работает с картинками;
• Поддерживает русский язык;
• Запускается через терминал.
Простой инструмент для автоматизации, распознавания чеков, объявлений или конспектов без лишней нагрузки.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤5🔥3👎1
Создаём метрические литералы за 1 минуту!
Иногда хочется писать
Используем их так же легко, как числа:
🔥 Код становится самодокументируемым, а арифметика — безопасной и constexpr-чистой.
📣 C++ Ready | #практика
Иногда хочется писать
5_km + 300_m
без «магических» коэффициентов. Пользовательские литералы делают это читаемо и проверяемо на этапе компиляции:struct Meter {
double value;
// всегда в метрах
constexpr explicit operator double() const { return value; }
};
constexpr Meter operator"" _m (long double v) { return Meter{static_cast<double>(v)}; }
constexpr Meter operator"" _km(long double v) { return Meter{static_cast<double>(v * 1000)}; }
Используем их так же легко, как числа:
constexpr Meter d = 5.0_km + 300.0_m; // 5300 м на этапе компиляции
static_assert(static_cast<double>(d) == 5300.0);
std::cout << d.value << " m\n"; // вывод: 5300
🔥 Код становится самодокументируемым, а арифметика — безопасной и constexpr-чистой.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤4👍4👎2