This media is not supported in your browser
VIEW IN TELEGRAM
Внутри собраны базовые темы языка: переменные, циклы, функции, указатели, ООП, STL и другие важные вещи, которые нужны для понимания современного C++. Материал подан максимально понятно и с примерами кода, поэтому можно сразу запускать и разбирать, как всё работает на практике.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20🔥7👍6👎2
Почему std::endl может тормозить программу?
Многие используют
Но
Сначала он добавляет перевод строки.
А потом принудительно сбрасывает буфер потока через flush.
В одном месте это может быть незаметно. Но если такой код стоит в цикле:
то программа может стать сильно медленнее.
Если тебе нужен просто перенос строки, чаще всего достаточно:
А
🔥 std::endl — это новая строка с принудительный flush. Стоит помнить это!
📣 C++ Ready | #совет
Многие используют
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 действительно нужен.Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍6🔥5
Лёгкая утилита-«швейцарский нож» для TCP/UDP и UNIX-сокетов: слушает/устанавливает соединения, пересылает файлы, делает обратные оболочки, стримит и сканирует порты/граббинг баннеров.
Часто комбинируют с openssl, tar, dd для шифрования, архивации и клонирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤6👍4
Почему std::accumulate может неожиданно обрезать дроби?
На первый взгляд здесь всё нормально:
В vector лежат double, значит сумма тоже должна быть double.
Но есть нюанс. Тип аккумулятора задаётся третьим аргументом.
А 0 — это int.
Поэтому вычисление может идти через целочисленный аккумулятор, и дробная часть будет теряться.
Правильно так:
Теперь начальное значение — double, и сумма считается как double.
🔥 В std::accumulate третий аргумент — это не просто старт. Это тип всего вычисления.
📣 C++ Ready | #совет
На первый взгляд здесь всё нормально:
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.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍7🔥3🤝3
Генерируем случайный пароль на чистом 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
👍14❤5🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь пошагово разбираются основы языка: переменные, циклы, функции, массивы, указатели, ООП, классы и другие важные темы. Всё объясняется простым языком с примерами кода и постепенным усложнением материала. Помимо основ, есть статьи по более продвинутым возможностям языка и практические примеры.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤6🤝6👍2