Генерируем случайный пароль на чистом C++!
Иногда нужно быстро создать случайную строку: временный пароль, токен для тестов или случайный идентификатор. Вручную выбирать символы неудобно, поэтому можно собрать маленький генератор с помощью стандартной библиотеки.
Для этого используем
Теперь создадим функцию, которая генерирует пароль нужной длины:
Теперь функцию можно вызвать из
При каждом запуске программа будет создавать новую случайную строку:
Внутри всё просто: мы задаём набор допустимых символов, случайно выбираем индекс из этого набора и добавляем выбранный символ в результат.
🔥 Генератор паролей на C++ — это простой способ увидеть
📣 C++ Ready | #практика
Иногда нужно быстро создать случайную строку: временный пароль, токен для тестов или случайный идентификатор. Вручную выбирать символы неудобно, поэтому можно собрать маленький генератор с помощью стандартной библиотеки.
Для этого используем
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
Внутри всё просто: мы задаём набор допустимых символов, случайно выбираем индекс из этого набора и добавляем выбранный символ в результат.
std::random в деле и сразу получить полезный результат.Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤5🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь пошагово разбираются основы языка: переменные, циклы, функции, массивы, указатели, ООП, классы и другие важные темы. Всё объясняется простым языком с примерами кода и постепенным усложнением материала. Помимо основ, есть статьи по более продвинутым возможностям языка и практические примеры.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21❤8🤝6👍2
Например,
fmt::print и fmt::format позволяют писать безопасное, читаемое и производительное форматирование без printf и перегруженных stringstream.На изображении собраны возможности
{fmt}: плейсхолдеры и именованные аргументы; форматирование целых и вещественных чисел; работа со строками, диапазонами и кортежами.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24❤11👍6
Почему для класса часто нужен virtual destructor?
Если у класса есть virtual-функции, его часто используют полиморфно:
И вот здесь появляется опасность.
Если у Base нет virtual destructor, удаление объекта через Base* может не вызвать деструктор наследника корректно.
То есть ресурсы Task могут не освободиться.
Код на слайде выглядит почти нормально:
Но если этот класс предназначен для удаления через указатель на Base, деструктор должен быть virtual:
Это маленькая строчка, которая защищает от очень неприятных багов.
🔥 Если класс полиморфный и через него могут удалять наследников — добавь virtual destructor.
📣 C++ Ready | #совет
Если у класса есть 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;
};Это маленькая строчка, которая защищает от очень неприятных багов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍8🔥4
Например,
.find() помогает быстро найти подстроку, .substr() — вырезать часть строки, а .replace() — заменить текст без лишней ручной работы.На картинке — полезные методы
std::string, работа с итераторами, конвертация строк в числа и обратно, а также базовые операции изменения строк. Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤5👍3
RAII для ресурсов: FILE* без утечек и fclose в каждом return
Классика в C/C++ — открыть файл и не забыть закрыть:
Проблема в том, что при ранних
В C++ это решается RAII: ресурс закрывается автоматически в деструкторе.
Проще всего — завернуть
Можно сделать маленький хелпер, чтобы было ещё чище:
🔥 RAII убирает “обязанность помнить” про
📣 C++ Ready | #практика
Классика в 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;close/fclose/free — ресурс закрывается гарантированно при любом выходе из функции, а код становится короче и надёжнее.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🔥3😁1
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте ты найдёшь короткие уроки и практические упражнения с мгновенной проверкой: от Hello, World, переменных и функций до тем вроде указателей, массивов, linked lists и базового OOP.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤5👍2
40 собесов и оффер за 1 месяц
Алексей разработчик.
Искал работу с декабря - написание сопроводов и отклики занимали очень много времени.
Выхлоп - почти нулевой.
В какой-то момент понял:
так можно искать бесконечно.
И по совету друга попробовал ии-ассистента Софи.
▫️За ~1 месяц прошел около 40 собеседований
▫️Получил оффер с вакансии, на которую, по его словам, не откликнулся бы сам
Весь процесс - от первого собеседования до оффера - занял 4 дня.
P.S. Попробовать Софи бесплатно можно будет 16 июня.
Не пропусти анонс здесь.
Алексей разработчик.
Искал работу с декабря - написание сопроводов и отклики занимали очень много времени.
Выхлоп - почти нулевой.
В какой-то момент понял:
так можно искать бесконечно.
И по совету друга попробовал ии-ассистента Софи.
▫️За ~1 месяц прошел около 40 собеседований
▫️Получил оффер с вакансии, на которую, по его словам, не откликнулся бы сам
В описании она выглядела скучно, а по факту - одна из самых интересных компаний, с которыми я общался.
Весь процесс - от первого собеседования до оффера - занял 4 дня.
P.S. Попробовать Софи бесплатно можно будет 16 июня.
Не пропусти анонс здесь.
👎8
Иногда нужно заменить значение, но при этом не потерять то, что было раньше.
std::exchange как раз делает это без лишнего кода: возвращает старое значение и сразу записывает новое.Что важно знать:
• Удобен, когда нужно обновить состояние и сохранить предыдущее
• Хорошо подходит для флагов, reset-логики и простых state-переходов
• Делает намерение понятнее, чем ручное “сохранили старое, потом присвоили новое”
Небольшая функция из
<utility>, которая часто помогает убрать пару лишних строк и сделать код аккуратнее.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🔥3