C/C++ Ready | Программирование
13.3K subscribers
848 photos
49 videos
384 links
Авторский канал по разработке на C и C++.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

Заявление в РКН: № 6188956972

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
Что же выведет консоль?
Anonymous Quiz
58%
A
16%
B
16%
C
11%
D
5👍4🔥3
👩‍💻 Осваиваем новые трюки со span!

Сегодня покажу, как получать байты, задавать фиксированные размеры и передавать диапазоны в алгоритмы без лишних усилий.

Что важно знать:

Байтный вид быстро;

Фиксированная длина экономит;

Легко сортировать напрямую.


Это продолжение прошлого гайда
— теперь span раскроется на полную силу.

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍54
Асинхронное чтение файлов с std::async!

Иногда нужно загрузить сразу несколько больших файлов без блокировки основного потока — например, при подготовке ресурсов для приложения или анализа логов.

С 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() вернёт содержимое файлов.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115🔥3
👩‍💻 Дерево Фенвика для быстрых сумм!

Позволяет мгновенно обновлять элементы и считать сумму на любом префиксе за логарифм времени.

Что важно знать:

Хранит частичные куски;

Обновляет несколько позиций;

Быстро считает префиксы.


Дерево Фенвика удобно, просто реализуется и эффективно решает задачи с частыми обновлениями и запросами.

📣 C++ Ready | #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥114👍4
Умные указатели и static_pointer_cast: безопасный кастинг!

Когда у вас есть 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.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥3👎1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Программисты из CodeGuard слили в телеграмм тонны инфы

🔥 Всё, что нужно для прогресса — в одном месте:

|- - - 📂 Общее IT — 1526ГБ
|
|- - - 📂 Хакинг & infosec — 573ГБ
|
|- - - 📂 Linux & Bash — 652ГБ
|
|- - - 📂 Python — 428ГБ
|
|- - - 📂 Работа IT — 356ГБ

📌 Гайды, шпаргалки, книги, задачи и ресурсы для каждого.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁21🔥1
👩‍💻 Распознаём текст из изображений в консоли!

Утилита пригодится, если нужно быстро извлечь текст из скриншота, фото или PDF-страницы.

Что важно знать:

Работает с картинками;

Поддерживает русский язык;

Запускается через терминал.


Простой инструмент для автоматизации, распознавания чеков, объявлений или конспектов без лишней нагрузки.

📣 C++ Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95🔥3👎1
Создаём метрические литералы за 1 минуту!

Иногда хочется писать 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-чистой.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥104👍4👎2