В этом посте мы создадим таймер на C++, который выполняет обратный отсчет времени и запускает функцию по завершению.
- Запрос времени и проверка ввода
- Функция обратного отсчета
- Вызов функции таймера
- Действие по завершении
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥60🤝10👍5👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Знали про интересный ресурс — Tutorials Point ?
Здесь собрано очень много полезной информации о C++, также к каждому туториалу прикреплен код
📌 Ссылочка: tutorialspoint.com
📣 C++ Ready | #ресурс
Здесь собрано очень много полезной информации о C++, также к каждому туториалу прикреплен код
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥3🤝3
Сегодня рассмотрим, как неправильное использование std::move может привести к неожиданным багам. Хотя этот инструмент полезен для оптимизации, он требует точного понимания, чтобы избежать ловушек.
Повторное использование объекта после std::move
После применения
std::move
объект переходит в состояние "неопределенности". Попытка использовать такой объект может вызвать неожиданные проблемыstd::string str = "Hello";
std::string moved_str = std::move(str);
std::cout << "Moved string: " << moved_str << "\n";
std::cout << "Original string: " << str << "\n"; // Содержимое str не определено!
Результат:
moved_str
содержит "Hello", но str
становится пустым или неопределенным. Решение: Избегать доступа к перемещенному объекту
Если объект перемещен, не используйте его напрямую:
std::string moved_str = std::move(str);
if (str.empty()) {
std::cout << "Original string is now empty!\n";
}
Вектор и std::move
Использование
std::move
с контейнерами, такими как std::vector
, может привести к потере данных: std::vector<int> vec = {1, 2, 3};
std::vector<int> moved_vec = std::move(vec);
std::cout << "Original vector size: " << vec.size() << "\n";
std::cout << "Moved vector size: " << moved_vec.size() << "\n";
Результат:
vec
становится пустым, а данные передаются в moved_vec
. Однако повторное использование vec
вызовет проблемы. После перемещения не используйте исходный объект, а для контейнеров всегда проверяйте их состояние после
std::move
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍9
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍7🤝6
Переведённые на русский язык лекции топового Гарвардского курса CS50 по основам программирования. Курс охватывает ключевые концепции информатики, такие как алгоритмы, структуры данных, веб-разработка и многое другое.
Ссылка на плейлист: YouTube🖤
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍6🤝2👎1
1. Указатели: Где живут данные — это такие "хитрые" переменные, которые хранят не данные, а адреса других переменных:
int x = 10;
int* ptr = &a; // ptr хранит адрес переменной a
2. Ссылки: Удобные "алиасы" — нечто вроде альтернативных имён для переменных. Позволяют обращаться к одной и той же переменной под разными именами:
int& ref = x; // ref — это просто другое имя для переменной x
3. Указатели против ссылок — Вот в чём интересная штука: указатели могут быть неинициализированными или "нулевыми", что указывает на отсутствие адреса.
А вот ссылки такого себе позволить не могут. Ссылку обязательно нужно сразу инициализировать и после этого она не может быть переназначена на что-то другое:
int* ptr2 = nullptr; // указатель может быть пустым
// int& ref2; // ошибка, ссылку нельзя оставить неинициализированной
4. Указатели и ссылки в функциях —когда вы передаёте аргументы в функции, указатели и ссылки позволяют не копировать переменные, а передавать их адреса или алиасы:
void increment(int* ptr) {
(*ptr)++; // изменение значения по указателю
}
increment(&a); // передаём адрес переменной a
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍6🤝3
📖 Контролируемый взлом
⬇️ Скачать книгу
📣 C++ Ready | #книга
Книга предназначена как для профессионалов в области информационной безопасности, так и для широкой аудитории, интересующейся темой киберугроз и защиты данных
Автор: Юрий Другач
Год: 2024
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍1👎1
Летс го, в этом посте изучим использование C++ шаблонов, которые позволяют создавать универсальные функции и классы. Вы узнаете про:
- Шаблон для нахождения максимума
- Шаблон класса для контейнера
- Шаблон с несколькими параметрами
🔥 — если узнал новое
🤝 — если уже пользовался
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29🤝12👍4