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

Автор: @energy_it

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

Реклама на бирже: https://telega.in/c/cpp_ready
Download Telegram
📂 Напоминалка по std::string в C++!

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

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

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥205👍3
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
👍124🔥4😁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
🔥156👍3
👩‍💻 std::exchange: забрать старое значение за одну строку!

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

Что важно знать:

Удобен, когда нужно обновить состояние и сохранить предыдущее

Хорошо подходит для флагов, reset-логики и простых state-переходов

Делает намерение понятнее, чем ручное “сохранили старое, потом присвоили новое”


Небольшая функция из <utility>, которая часто помогает убрать пару лишних строк и сделать код аккуратнее.

📣 C++ Ready | #гайд
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 - это не одно и то же!

Concurrency - это про структуру программы: несколько задач могут продвигаться вперёд в перекрывающиеся промежутки времени. Parallelism - это уже физическое одновременное выполнение, например на нескольких ядрах CPU.

На картинке — визуальное отличие concurrent execution от parallel execution. Сохрани, чтобы не потерять!

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
18👍7🔥4🤝2
📂 Напоминалка по бинарному поиску и алгоритмам ranges в C++20!

Например, ranges::binary_search помогает быстро проверить наличие элемента в отсортированном диапазоне, а ranges::lower_bound и ranges::upper_bound — находить границы вставки или диапазон одинаковых значений.

На картинке — алгоритмы бинарного поиска из std::ranges, которые стоит держать под рукой при работе с контейнерами и алгоритмами STL.

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍64
Проверяем, что строка — целиком число (без “42abc → 42”)

Сейчас научимся превращать строку в 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"):
Лишние символы


🔥 Так ты гарантируешь, что строка — строго число, без “42 и хвостик в придачу”.

📣 C++ Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍74👎2
This media is not supported in your browser
VIEW IN TELEGRAM
😍 Whimsical — AI-инструмент для создания схем, mind map и документации!

Сервис для визуализации идей, архитектуры и рабочих процессов. В Whimsical можно создавать mind map, заметки и диаграммы, а встроенный AI помогает автоматически генерировать схемы и структурировать информацию по текстовому запросу. Удобно продумывать архитектуру проектов.

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

📣 C++ Ready | #сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥103👍2
👩‍💻 Числовые вычисления проще, чем кажется!

Стандартная библиотека C++ предоставляет удобные функции для работы с числами: можно легко суммировать значения, считать скалярное произведение, генерировать последовательности или выполнять накопительные вычисления.

📣 C++ Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥84
📂 Напоминалка по числовым типам в C++!

Например, std::numeric_limits<T>::max() позволяет узнать максимальное значение типа, а std::numeric_limits<T>::lowest() — минимальное возможное значение.

На картинке — краткая шпаргалка по целочисленным типам (int, long, uint64_t и другим), числам с плавающей точкой (float, double, long double) и возможностям std::numeric_limits.

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍207🔥5
Почему std::vector::reserve может ускорить добавление элементов?

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);


📣 C++ Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥156👍5🤝1
Напоминалка по выбору контейнера в C++!

Например, std::vector обычно подходит, когда нужен быстрый доступ по индексу и хранение элементов подряд в памяти, а std::deque удобен, если нужно эффективно добавлять элементы и в начало, и в конец.

На картинке краткая схема выбора sequence-контейнера: std::vector, std::deque, std::list, std::forward_list и std::array.

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

📣 C++ Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍165🔥4😁1