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

Автор: @energy_it

РКН: https://clck.ru/3QREHc

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
Быстро удаляем пробелы в начале и в конце строки!

Когда мы читаем строки из файла, пользовательского ввода или сетевого запроса — часто получаем "шум": пробелы, табы, переводы строк.

Во многих языках есть встроенные trim()-функции, но в C++ стандартной такой нет. Зато её легко реализовать самому — компактно, эффективно и без сторонних зависимостей.

Начнём с подключения нужных заголовков:
#include <string>
#include <cctype> // std::isspace
#include <algorithm>
#include <iostream>


Теперь реализуем функцию trim, которая:
• пропускает все пробелы с начала строки;
• пропускает все пробелы с конца;
• возвращает обрезанную часть как новую строку:
std::string trim(const std::string& s) {
auto start = std::find_if_not(s.begin(), s.end(), ::isspace);
auto end = std::find_if_not(s.rbegin(), s.rend(), ::isspace).base();
return (start < end) ? std::string(start, end) : "";
}


Проверим, как это работает на примере строки с лишними пробелами и переводами строк:
std::string raw = "   \t\n Hello, world! \n ";
std::string cleaned = trim(raw);

std::cout << "[" << cleaned << "]\n";


Результат выполнения:
[Hello, world!]


🔥 Теперь у тебя есть удобная функция, которая безопасно удаляет "мусор" по краям строки.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥98👍4
This media is not supported in your browser
VIEW IN TELEGRAM
☕️ C++ Basics Tutorials — структурированное изучение C++ с практикой!

Внутри собраны базовые темы языка: переменные, циклы, функции, указатели, ООП, STL и другие важные вещи, которые нужны для понимания современного C++. Материал подан максимально понятно и с примерами кода, поэтому можно сразу запускать и разбирать, как всё работает на практике.

Оставляю ссылочку: GitHub 📱


📣 C++ Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
20🔥7👍6👎2
Почему std::endl может тормозить программу?

Многие используют std::endl как обычный перевод строки:
std::cout << i << std::endl;


Но std::endl делает две вещи.

Сначала он добавляет перевод строки.
А потом принудительно сбрасывает буфер потока через flush.

В одном месте это может быть незаметно. Но если такой код стоит в цикле:
for (int i = 0; i < 100000; ++i) {
std::cout << i << std::endl;
}


то программа может стать сильно медленнее.

Если тебе нужен просто перенос строки, чаще всего достаточно:
std::cout << i << '\n';


А std::endl стоит использовать тогда, когда flush действительно нужен.

🔥 std::endl — это новая строка с принудительный flush. Стоит помнить это!

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
26👍6🔥5
📂 Напоминалка по netcat (nc) — универсальному сетевому «швейцарскому ножу»

Лёгкая утилита-«швейцарский нож» для TCP/UDP и UNIX-сокетов: слушает/устанавливает соединения, пересылает файлы, делает обратные оболочки, стримит и сканирует порты/граббинг баннеров.

Часто комбинируют с openssl, tar, dd для шифрования, архивации и клонирования.

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥136👍4
Почему std::accumulate может неожиданно обрезать дроби?

На первый взгляд здесь всё нормально:
std::vector<double> v = {1.5, 2.5, 3.5};

auto sum = std::accumulate(v.begin(), v.end(), 0);


В vector лежат double, значит сумма тоже должна быть double.

Но есть нюанс. Тип аккумулятора задаётся третьим аргументом.
А 0 — это int.

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

Правильно так:
auto sum = std::accumulate(v.begin(), v.end(), 0.0);


Теперь начальное значение — double, и сумма считается как double.

🔥 В std::accumulate третий аргумент — это не просто старт. Это тип всего вычисления.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍7🔥3🤝3
😎 Как рендер может тормозить UI?

В этой статье:

• Как разделить CPU и GPU задачи
• Как работают очереди и command buffers
• Зачем Vulkan требует явной синхронизации


🔊 Продолжай читать на habr!


📣 C++ Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍3👎3🔥3
Генерируем случайный пароль на чистом C++!

Иногда нужно быстро создать случайную строку: временный пароль, токен для тестов или случайный идентификатор. Вручную выбирать символы неудобно, поэтому можно собрать маленький генератор с помощью стандартной библиотеки.

Для этого используем std::random_device, std::mt19937 и std::uniform_int_distribution.

Теперь создадим функцию, которая генерирует пароль нужной длины:
std::string make_password(std::size_t length) {
const std::string chars =
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789"
"!@#$%^&*";

std::random_device rd;
std::mt19937 gen(rd());

std::uniform_int_distribution<std::size_t> dist(
0, chars.size() - 1
);

std::string result;

for (std::size_t i = 0; i < length; ++i) {
result += chars[dist(gen)];
}

return result;
}


Теперь функцию можно вызвать из main:
int main() {
std::string password = make_password(12);

std::cout << "Password: " << password << '\n';
}


При каждом запуске программа будет создавать новую случайную строку:
Password: a7K!pQ2z#Lm9


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

🔥 Генератор паролей на C++ — это простой способ увидеть std::random в деле и сразу получить полезный результат.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍155🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
☕️ C++ Tutorial — подробный гайд по C++ для начинающих!

Здесь пошагово разбираются основы языка: переменные, циклы, функции, массивы, указатели, ООП, классы и другие важные темы. Всё объясняется простым языком с примерами кода и постепенным усложнением материала. Помимо основ, есть статьи по более продвинутым возможностям языка и практические примеры.

📌 Оставляю ссылочку: beginnersbook.com

📣 C++ Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥218🤝6👍2
📂 Шпаргалка по библиотеке {fmt}!

Например, fmt::print и fmt::format позволяют писать безопасное, читаемое и производительное форматирование без printf и перегруженных stringstream.

На изображении собраны возможности {fmt}: плейсхолдеры и именованные аргументы; форматирование целых и вещественных чисел; работа со строками, диапазонами и кортежами.

Сохрани, чтобы не потерять!

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2411👍6
Почему для класса часто нужен virtual destructor?

Если у класса есть virtual-функции, его часто используют полиморфно:
Base* task = new Task;
delete task;


И вот здесь появляется опасность.

Если у Base нет virtual destructor, удаление объекта через Base* может не вызвать деструктор наследника корректно.

То есть ресурсы Task могут не освободиться.

Код на слайде выглядит почти нормально:
struct Base {
virtual void run() = 0;
};


Но если этот класс предназначен для удаления через указатель на Base, деструктор должен быть virtual:
struct Base {
virtual ~Base() = default;
virtual void run() = 0;
};


Это маленькая строчка, которая защищает от очень неприятных багов.

🔥 Если класс полиморфный и через него могут удалять наследников — добавь virtual destructor.

📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍8🔥4
📂 Напоминалка по std::string в C++!

Например, .find() помогает быстро найти подстроку, .substr() — вырезать часть строки, а .replace() — заменить текст без лишней ручной работы.

На картинке — полезные методы std::string, работа с итераторами, конвертация строк в числа и обратно, а также базовые операции изменения строк.

Сохрани, чтобы не потерять!

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥185👍3
Ищут 10 человек, чтобы собирали чат-ботов по шаблону, как пазлы.

ЗП: от 5-9000₽ за вечер.
Занятость: 3-4 часа в день.
Опыт: не нужен.

Как мы работаем:
1. Ты проходишь обучение пару недель;
2. Берёшь реальный проект из моей базы;
3. Собираешь бота по проверенной формуле;
4. Наставник контролирует процесс;
5. Получаешь деньги и закрепляешь клиента.

Весь процесс занимает до 2х недель с нуля до первых денег на твою карту.

Даниил из Балашихи был военнослужащим — с июля 2024 года начал создавать чат-ботов для бизнеса и уже заработал 4 млн. рублей. А главное теперь у него больше свободного времени на семью, друзей и развлечения.

Да, ты не первый. 216 человек уже ведут постоянных клиентов по моей формуле. Ведь сайт со статистикой Wordstat показывает 10 786 запросов за месяц в поисковике от бизнеса на эту услугу.

Заказов валом. Срочно нужны твои руки и голова.

Чтобы быстро разобраться во всех нюансах — запускай бота

Там пошаговый план как стартануть и гайд по клиентам.

8 мест ещё свободно
👎202
RAII для ресурсов: FILE* без утечек и fclose в каждом return

Классика в C/C++ — открыть файл и не забыть закрыть:
FILE* f = std::fopen(path, "rb");
if (!f) return;

do_work(f);

if (something_bad()) {
std::fclose(f); // легко забыть
return;
}

std::fclose(f);


Проблема в том, что при ранних return, исключениях или новых ветках кода fclose легко потерять — и получить утечку ресурса.

В C++ это решается RAII: ресурс закрывается автоматически в деструкторе.

Проще всего — завернуть FILE* в std::unique_ptr с кастомным deleter’ом:
using FilePtr = std::unique_ptr<FILE, decltype(&std::fclose)>;

FilePtr f(std::fopen(path, "rb"), &std::fclose);
if (!f) return;

do_work(f.get());

if (something_bad()) {
return; // fclose вызовется сам
}


Можно сделать маленький хелпер, чтобы было ещё чище:
FilePtr open_file(const char* path, const char* mode) {
return FilePtr(std::fopen(path, mode), &std::fclose);
}

auto f = open_file(path, "rb");
if (!f) return;


🔥 RAII убирает “обязанность помнить” про close/fclose/free — ресурс закрывается гарантированно при любом выходе из функции, а код становится короче и надёжнее.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103🔥3😁1
This media is not supported in your browser
VIEW IN TELEGRAM
😍 learn-cpp - это бесплатный интерактивный туториал по, который позволяет учиться прямо в браузере!

На сайте ты найдёшь короткие уроки и практические упражнения с мгновенной проверкой: от Hello, World, переменных и функций до тем вроде указателей, массивов, linked lists и базового OOP.

📌 Оставляю ссылочку: learn-cpp.org

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥144👍2