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
🔥15❤6👍3
Иногда нужно заменить значение, но при этом не потерять то, что было раньше.
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
❤11🔥11👍5🤝2
Concurrency - это про структуру программы: несколько задач могут продвигаться вперёд в перекрывающиеся промежутки времени. Parallelism - это уже физическое одновременное выполнение, например на нескольких ядрах CPU.
На картинке — визуальное отличие concurrent execution от parallel execution. Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍7🔥4🤝2
Например,
ranges::binary_search помогает быстро проверить наличие элемента в отсортированном диапазоне, а ranges::lower_bound и ranges::upper_bound — находить границы вставки или диапазон одинаковых значений.На картинке — алгоритмы бинарного поиска из
std::ranges, которые стоит держать под рукой при работе с контейнерами и алгоритмами STL.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍6❤4
Проверяем, что строка — целиком число (без “42abc → 42”)
Сейчас научимся превращать строку в
Допустим, пришла строка с хвостом:
Если
А чтобы программа не падала на ошибках, добавим
Проверяем “хвост” и печатаем результат:
Ловим два типичных случая ошибок:
Возможный результат (для
🔥 Так ты гарантируешь, что строка — строго число, без “42 и хвостик в придачу”.
📣 C++ Ready | #практика
Сейчас научимся превращать строку в
int так, чтобы не принимать мусор вроде "42abc". Это будет полезно для CLI, конфигов и пользовательского ввода.Допустим, пришла строка с хвостом:
std::string raw = "42abc";
std::stoi может распарсить только начало и вернуть 42. Поэтому берём pos — позицию, где парсинг остановился:size_t pos = 0;
int value = std::stoi(raw, &pos);
Если
pos не дошёл до конца строки — значит в конце есть лишние символы:if (pos != raw.size()) {
std::cout << "Некорректный ввод: лишние символы\n";
}А чтобы программа не падала на ошибках, добавим
try-catch:try {
size_t pos = 0;
int value = std::stoi(raw, &pos);Проверяем “хвост” и печатаем результат:
if (pos != raw.size()) { std::cout << "Лишние символы\n"; return 0; }
std::cout << "Число: " << value << '\n';Ловим два типичных случая ошибок:
} catch (const std::invalid_argument&) {
std::cout << "Некорректный ввод: не число\n";
} catch (const std::out_of_range&) {
std::cout << "Число вне диапазона int\n";
}Возможный результат (для
"42abc"):Лишние символы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍7❤4👎2
This media is not supported in your browser
VIEW IN TELEGRAM
Сервис для визуализации идей, архитектуры и рабочих процессов. В Whimsical можно создавать mind map, заметки и диаграммы, а встроенный AI помогает автоматически генерировать схемы и структурировать информацию по текстовому запросу. Удобно продумывать архитектуру проектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤3👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥8❤4
Например,
std::numeric_limits<T>::max() позволяет узнать максимальное значение типа, а std::numeric_limits<T>::lowest() — минимальное возможное значение.На картинке — краткая шпаргалка по целочисленным типам (int, long, uint64_t и другим), числам с плавающей точкой (float, double, long double) и возможностям
std::numeric_limits.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤7🔥5
Почему std::vector::reserve может ускорить добавление элементов?
std::vector хранит элементы в непрерывном участке памяти.
Когда ты добавляешь новые элементы через push_back, вектор может понять, что места больше нет. Тогда ему приходится выделить новый участок памяти, перенести туда старые элементы и только потом добавить новый.
В маленьком примере это почти незаметно:
Но если элементов много, лишние перевыделения памяти могут замедлять программу.
Если ты заранее знаешь примерное количество элементов, можно вызвать reserve:
reserve не добавляет элементы в вектор. Он только заранее выделяет память.
После такого вызова:
размер всё ещё будет нулевым:
Если нужно именно создать 100 элементов, тогда используют resize:
📣 C++ Ready | #совет
std::vector хранит элементы в непрерывном участке памяти.
Когда ты добавляешь новые элементы через push_back, вектор может понять, что места больше нет. Тогда ему приходится выделить новый участок памяти, перенести туда старые элементы и только потом добавить новый.
В маленьком примере это почти незаметно:
std::vector<int> numbers;
for (int i = 0; i < 100; ++i) {
numbers.push_back(i);
}
Но если элементов много, лишние перевыделения памяти могут замедлять программу.
Если ты заранее знаешь примерное количество элементов, можно вызвать reserve:
std::vector<int> numbers;
numbers.reserve(100);
for (int i = 0; i < 100; ++i) {
numbers.push_back(i);
}
reserve не добавляет элементы в вектор. Он только заранее выделяет память.
После такого вызова:
std::vector<int> v;
v.reserve(100);
размер всё ещё будет нулевым:
std::cout << v.size() << '\n'; // 0
std::cout << v.capacity() << '\n'; // 100
Если нужно именно создать 100 элементов, тогда используют resize:
v.resize(100);
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤6👍5🤝1
Напоминалка по выбору контейнера в C++!
Например,
На картинке краткая схема выбора sequence-контейнера:
Сохрани, чтобы не потерять!
📣 C++ Ready | #ресурс
Например,
std::vector обычно подходит, когда нужен быстрый доступ по индексу и хранение элементов подряд в памяти, а std::deque удобен, если нужно эффективно добавлять элементы и в начало, и в конец.На картинке краткая схема выбора sequence-контейнера:
std::vector, std::deque, std::list, std::forward_list и std::array.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤5🔥4😁1
Парсим числа из строки на чистом C++!
Иногда нужно разобрать строку с данными. Например числа из конфига, координаты, значения из файла или простую команду пользователя.
Есть строка:
Вручную искать пробелы и резать строку неудобно. Для таких задач можно использовать std::istringstream.
Создадим поток из строки:
Теперь из него можно читать значения так же, как из std::cin:
На выходе получим:
Это удобно, когда данные идут в простом текстовом формате и разделены пробелами, переносами строк или табами.
Например, так можно разобрать координаты:
Если строка содержит мусор вместо числа, чтение просто остановится, и это можно проверить:
📣 C++ Ready | #практика
Иногда нужно разобрать строку с данными. Например числа из конфига, координаты, значения из файла или простую команду пользователя.
Есть строка:
std::string text = "10 20 30 40";
Вручную искать пробелы и резать строку неудобно. Для таких задач можно использовать std::istringstream.
#include <iostream>
#include <sstream>
#include <string>
Создадим поток из строки:
std::istringstream input(text);
Теперь из него можно читать значения так же, как из std::cin:
int value;
while (input >> value) {
std::cout << value << '\n';
}
На выходе получим:
10
20
30
40
Это удобно, когда данные идут в простом текстовом формате и разделены пробелами, переносами строк или табами.
Например, так можно разобрать координаты:
std::string point = "15 42";
std::istringstream input(point);
int x;
int y;
input >> x >> y;
Если строка содержит мусор вместо числа, чтение просто остановится, и это можно проверить:
if (!(input >> value)) {
std::cout << "Invalid number\n";
}Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍9🔥6😁2
Корутины — это функции, выполнение которых можно приостанавливать и продолжать. Они позволяют писать асинхронный и ленивый код без громоздких колбэков и сложного состояния.
Что важно знать:
• Три ключевых оператора: co_await, co_yield, co_return.
• Можно создавать генераторы, которые возвращают значения по одному.
• Асинхронные функции выглядят как обычные — без вложенности и запутанных цепочек вызовов.
Это мощный инструмент современного C++, который легко интегрируется с другими фичами языка.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20❤6👍6