Утилита на C++ с помощью
libgit2 выводит N последних коммитов вместе с автором, временем и кратким сообщением в понятном консольном формате.В этой CLI-утилите:
• Помогает быстро просматривать историю важных изменений проекта;
• Упрощает командную строку и избавляет от лишних действий;
• Позволяет всегда видеть автора и время каждого коммита.
Этот инструмент станет отличным дополнением к рабочему процессу C++ проектов и ускорит анализ изменений.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍5❤4🤝1
Чтобы нельзя было «случайно проигнорировать» важный результат, пометьте функцию атрибутом
[[nodiscard]]. Компилятор предупредит, если возвращаемое значение не используют.Пример:
parse_num() возвращает std::optional<int> с [[nodiscard]]. Вызов без проверки (parse_num("xx");) — сразу ворнинг, а корректный путь — через if (auto n = ... ).std::optional/std::expected.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍8❤5
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤4👍4
Лайфхак для сверхбыстрого сплита строк!
Задумывались, как разделить строку на части молниеносно и без лишних затрат памяти? Покажем, как сделать это по-настоящему элегантно.
В начале — универсальная функция обработки токенов: она обходит строку, выдаёт каждый фрагмент и
Теперь легко разбираем пары
А чтобы посчитать числа без аллокаций и зависимостей от локали, используем
🔥 Главное: манипулируйте
📣 C++ Ready | #практика
Задумывались, как разделить строку на части молниеносно и без лишних затрат памяти? Покажем, как сделать это по-настоящему элегантно.
В начале — универсальная функция обработки токенов: она обходит строку, выдаёт каждый фрагмент и
НЕ создаёт временных копий.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 и обрабатывайте данные на лету — никакой работы с копиями и выхлопом из аллокатора!Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥6❤4
Сегодня разбираем, почему момент старта работы меняет поведение программы и впечатление пользователя, и как осознанный выбор режима сохраняет время и нервы.
В этом гайде:
• Когда начинать работу, чтобы отклик был быстрее;
• Экономим ресурсы, не делая лишних действий заранее;
• Как проверять поведение, не вмешиваясь в процесс.
Запускайте работу вовремя, объясняйте выбор просто, показывайте выгоду, убирайте лишний шум постоянно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤9👍7🤝2
👍15🔥7❤4
Вместо бесконечных переборов вы последовательно сужаете границы, пока не останется одно-единственное число, экономя часы вычислений даже в самых тяжёлых задачах.
В этом посте:
• Идея занимает пару строк, а пользы море;
• Проверка понятна новичку и не путает опытных;
• Подходит как для игрушек, так и серьёзных систем.
Попробуйте этот приём однажды, и код начнёт выдавать результат быстрее, чем вы успеете щёлкнуть пальцами.
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