Вместо бесконечных переборов вы последовательно сужаете границы, пока не останется одно-единственное число, экономя часы вычислений даже в самых тяжёлых задачах.
В этом посте:
• Идея занимает пару строк, а пользы море;
• Проверка понятна новичку и не путает опытных;
• Подходит как для игрушек, так и серьёзных систем.
Попробуйте этот приём однажды, и код начнёт выдавать результат быстрее, чем вы успеете щёлкнуть пальцами.
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++-код часто выглядит так:
Легко случайно переиспользовать его в другом месте.
С C++17 можно объявить переменную прямо в условии:
Тот же приём работает и для
🔥 Полезно везде, где переменная нужна ровно для одной проверки — например,
📣 C++ Ready | #совет
Классический 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, результат парсера, дескриптор ресурса.Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥12❤5
Создавай параллельные потоки и управляй их завершением через join() или detach(). Это повышает производительность, но важно контролировать жизненный цикл потоков, чтобы избежать ошибок и утечек ресурсов.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20🤝9❤6👍4
Простой мини-логгер на std::format!
Хотите простой и лёгкий логгер с уровнями и метками времени без внешних библиотек?
Подключаем заголовки:
Определяем уровни и функцию вывода:
Используем в
🔥 Мини-логгер на чистом стандарте обеспечивает гибкие уровни и метки времени без лишних зависимостей.
📣 C++ Ready | #практика
Хотите простой и лёгкий логгер с уровнями и метками времени без внешних библиотек?
Подключаем заголовки:
#include <iostream>
#include <chrono>
#include <format>
#include <string_view>
Определяем уровни и функцию вывода:
enum class Level { INFO, WARN, ERROR };
void log(Level lvl, std::string_view msg) {
auto now = std::chrono::system_clock::now();
auto ts = std::format("{:%H:%M:%S}", now);
std::print("[{}][{}] {}\n",
ts,
lvl==Level::INFO ? "I" : lvl==Level::WARN ? "W" : "E",
msg);
}Используем в
main() для разных уровней:int main() {
log(Level::INFO, "Приложение запущено");
log(Level::WARN, "Память близка к лимиту");
log(Level::ERROR, "Ошибка при инициализации");
return 0;
}🔥 Мини-логгер на чистом стандарте обеспечивает гибкие уровни и метки времени без лишних зависимостей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤8👍5😁1
Как избежать скрытых багов из-за неявных конверсий enum?
Классические перечисления ведут себя как обычные
Передать
🔥 Используйте
📣 C++ Ready | #совет
enum class решает проблему одним движением: каждое перечисление становится полноценным типом.Классические перечисления ведут себя как обычные
int и легко «скрещиваются» друг с другом:enum Status { Ok, Error };
enum Color { Red, Green };
set_status(Red); // компилируется без варнингов!Передать
Color вместо Status больше не получится — компилятор остановит сборку (см. код на картинке).enum class по умолчанию; к старым enum возвращайтесь лишь ради legacy-кода.Please open Telegram to view this post
VIEW IN TELEGRAM
❤21👍7🔥5😁2
— Ты уволен
— Почему?
— Мы оплатили GPT-5, ты больше не нужен.
Вы тоже в ах@е с такого расклада? Учился лет 5, потом столько же батрачил за копейки ради опыта — чтобы тебя заменила еб@чая железяка.
А теперь задумайтесь: нейронки развиваются с бешеной скоростью. Поэтому сейчас как никогда нужны спецы для их обучения.
Чтобы в кратчайшие сроки выйти на уровень элиты и стать топом в сфере — подпишитесь на канал @devsp. Его автор раскрывает неочевидные секреты: как в 3 месяца уместить 6 лет обучения, достойно пройти любое собеседование и что делать, чтобы лучшие компании дрались за вас.
А временами подкидывает крутые вакансии и лайфхаки, после которых вас с руками оторвут даже без опыта.
Это всё равно что встретить Нео и войти в 10% тех, кто сломал систему. Подписывайтесь: @devsp
— Почему?
— Мы оплатили GPT-5, ты больше не нужен.
Вы тоже в ах@е с такого расклада? Учился лет 5, потом столько же батрачил за копейки ради опыта — чтобы тебя заменила еб@чая железяка.
А теперь задумайтесь: нейронки развиваются с бешеной скоростью. Поэтому сейчас как никогда нужны спецы для их обучения.
Чтобы в кратчайшие сроки выйти на уровень элиты и стать топом в сфере — подпишитесь на канал @devsp. Его автор раскрывает неочевидные секреты: как в 3 месяца уместить 6 лет обучения, достойно пройти любое собеседование и что делать, чтобы лучшие компании дрались за вас.
А временами подкидывает крутые вакансии и лайфхаки, после которых вас с руками оторвут даже без опыта.
Это всё равно что встретить Нео и войти в 10% тех, кто сломал систему. Подписывайтесь: @devsp
👎26😁4
Один небольшой кусок логики решает, кто в списке окажется впереди, а кто уйдёт вниз, превращая сортировку в понятные читаемые правила.
В этом гайде:
• Разберём, как описывать порядок элементов простыми условиями;
• Покажем, как добавить второй признак сравнения без шума;
• Научимся быстро менять логику сортировки под разные задачи
Освоив такие приёмы, вы перестанете бояться сложных списков и будете управлять ими уверенно каждый день.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤5👍5🤝5
Подсказки компилятору — атрибуты [[likely]] и [[unlikely]] в C++20
В современном C++ важно не только *что* делает код, но и *как часто* выполняются разные ветки. Атрибуты
С C++20 можно писать так:
Здесь мы явно говорим компилятору: позитивные значения — норма, отрицательные — редкость. Внутри
Атрибуты также работают в
Здесь
🔥 Такие подсказки не гарантируют ускорения, но помогают компилятору лучше оптимизировать горячие участки и делают намерения разработчика явными прямо в коде.
📣 C++ Ready | #практика
В современном C++ важно не только *что* делает код, но и *как часто* выполняются разные ветки. Атрибуты
[[likely]] и [[unlikely]] помогают подсказать компилятору, какие условия встречаются чаще — это может улучшить branch prediction и чуть ускорить критичные участки.С C++20 можно писать так:
int classify(int x) {
if (x >= 0) [[likely]] {
return 1; // «обычный» путь
} else [[unlikely]] {
return -1; // редкий случай
}
}
int main() {
std::cout << classify(10) << "\n"; // чаще
std::cout << classify(-5) << "\n"; // реже
}Здесь мы явно говорим компилятору: позитивные значения — норма, отрицательные — редкость. Внутри
if это выглядит аккуратно, без лишних макросов и #ifdef.Атрибуты также работают в
switch:const char* to_string_error(int code) {
switch (code) {
case 0:
[[likely]];
return "OK";
case 1:
return "Network error";
default:
[[unlikely]];
return "Unknown error";
}
}Здесь
case 0 — самый вероятный путь, а default помечен как маловероятный, но важный для диагностики.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥9👍6🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
|- - -
|
|- - -
|
|- - -
|
|- - -
|
|- - -
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1🔥1
Показываем числа всего на несколько секунд, стираем экран и спрашиваем одно из них, превращая обычный запуск программы в маленький тренажёр памяти.
В этой задаче:
• Соберёшь короткую игру, которая проверяет внимательность и память;
• Почувствуешь, как несколько секунд ожидания создают лёгкое напряжение;
• Увидишь, как привычное окно превращается в маленький полигон.
А если добавить несколько раундов, игра постепенно становится привычным вечерним зарядом для мозга на каждый день.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤6🤝2