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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
👩‍💻 Синхронная итерация и батчи без лишних копий!

В этой шпаргалке — знакомство с zip_view и chunk_view: как пробегать сразу по нескольким диапазонам, получая кортежи из элементов разных контейнеров, и разбивать длинные последовательности на удобные порции для пакетной обработки.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥184👍4
Лайфхак для сверхбыстрого сплита строк!

Задумывались, как разделить строку на части молниеносно и без лишних затрат памяти? Покажем, как сделать это по-настоящему элегантно.

В начале — универсальная функция обработки токенов: она обходит строку, выдаёт каждый фрагмент и НЕ создаёт временных копий.
template<class F>
void for_each_token(std::string_view s, char delim, F f) {
while (true) {
size_t pos = s.find(delim);
std::string_view token = s.substr(0, pos);
f(token);
if (pos == std::string_view::npos) break;
s.remove_prefix(pos + 1);
}
}


Теперь легко разбираем пары ключ=значение, работая прямо с исходной строкой.
std::string data = "id=42;name=anna;city=Helsinki";
for_each_token(data, ';', [](std::string_view kv) {
size_t eq = kv.find('=');
auto key = kv.substr(0, eq);
auto val = (eq == std::string_view::npos)
? std::string_view{}
: kv.substr(eq + 1);
// здесь обрабатываем key и val
});


А чтобы посчитать числа без аллокаций и зависимостей от локали, используем std::from_chars прямо внутри цикла.
int total = 0;
for_each_token("10,,20,30", ',', [&](std::string_view t) {
if (t.empty()) return;
int x;
auto res = std::from_chars(t.data(), t.data() + t.size(), x);
if (res.ec == std::errc()) total += x;
});


🔥 Главное: манипулируйте std::string_view и обрабатывайте данные на лету — никакой работы с копиями и выхлопом из аллокатора!

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥64
👩‍💻 Когда запуск задачи важнее самой задачи?

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

В этом гайде:

Когда начинать работу, чтобы отклик был быстрее;

Экономим ресурсы, не делая лишних действий заранее;

Как проверять поведение, не вмешиваясь в процесс.


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

📣 C++ Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥199👍7🤝2
Что же выведет консоль?
Anonymous Quiz
67%
A
17%
B
9%
C
7%
D
👍15🔥74
👩‍💻 Ловим ответ быстрым делением пополам!

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

В этом посте:

Идея занимает пару строк, а пользы море;

Проверка понятна новичку и не путает опытных;

Подходит как для игрушек, так и серьёзных систем.


Попробуйте этот приём однажды, и код начнёт выдавать результат быстрее, чем вы успеете щёлкнуть пальцами.

📣 C++ Ready | #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥6👍3🤝3😁1
Как не засорять область видимости временными переменными?

Классический C++-код часто выглядит так:
auto it = scores.find("neo");
if (it != scores.end()) {
std::cout << it->second;
}


it живёт дальше по коду, хотя нужен только для одного if.
Легко случайно переиспользовать его в другом месте.

С C++17 можно объявить переменную прямо в условии:
if (auto it = scores.find("neo"); it != scores.end()) {
std::cout << "Score: " << it->second << '\n';
} else {
std::cout << "Not found\n";
}


Тот же приём работает и для switch, while и даже проверки результата парсинга или открытия файла.

🔥 Полезно везде, где переменная нужна ровно для одной проверки — например, find(), lock_guard, результат парсера, дескриптор ресурса.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥125
👩‍💻 Рассмотрим thread — простой и эффективный способ добавить параллельность в свой код!

Создавай параллельные потоки и управляй их завершением через join() или detach(). Это повышает производительность, но важно контролировать жизненный цикл потоков, чтобы избежать ошибок и утечек ресурсов.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🤝96👍4