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
This media is not supported in your browser
VIEW IN TELEGRAM
Этот репозиторий отлично подойдёт тем, кто изучает алгоритмы, готовится к собеседованиям или хочет сильнее прокачать C++. Здесь собрано большое количество реализаций алгоритмов и структур данных с понятным кодом и хорошей организацией по темам. Можно не просто изучать теорию, а сразу смотреть, как алгоритмы реализуются на практике.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤4🔥4
🔥 Нужен Claude Pro? Подключим быстро, оплата российской картой
😏 Claude помогает во многих задачах: пишет, анализирует, объясняет и генерирует идеи. Пока ИИ работает, ты можешь сосредоточиться на главном.
🤔 Но оформить подписку Claude из РФ не так просто: нужна иностранная карта, а доступ может перестать работать в любой момент.
😉 Мы берём это на себя. Подключим Claude за 5–15 минут:
😎 Более 15 000 клиентов уже доверили нам оформление зарубежных сервисов. Если возникнут вопросы — всегда поможем и восстановим доступ.
🚀 Оформи Claude уже сегодня! А по промокоду CL300 ты получишь скидку в 300 руб. на первый заказ!
Заходи и оформляй у нас 👉 Claude Store
😏 Claude помогает во многих задачах: пишет, анализирует, объясняет и генерирует идеи. Пока ИИ работает, ты можешь сосредоточиться на главном.
🤔 Но оформить подписку Claude из РФ не так просто: нужна иностранная карта, а доступ может перестать работать в любой момент.
😉 Мы берём это на себя. Подключим Claude за 5–15 минут:
💳 Оплата российской картой или через СБП
⚡️ Быстрое подключение без лишних сложностей
🔒 Гарантия на весь срок подписки
😎 Более 15 000 клиентов уже доверили нам оформление зарубежных сервисов. Если возникнут вопросы — всегда поможем и восстановим доступ.
🚀 Оформи Claude уже сегодня! А по промокоду CL300 ты получишь скидку в 300 руб. на первый заказ!
Заходи и оформляй у нас 👉 Claude Store
👎11🔥2
Находим максимальный элемент через STL!
Иногда нужно найти самое большое значение: максимальную цену, лучший результат, самый длинный список или наибольший score.
Допустим, есть вектор чисел:
Можно искать максимум вручную:
Но в C++ для этого уже есть готовый алгоритм:
std::max_element возвращает итератор на максимальный элемент.
Поэтому перед использованием лучше проверить, что контейнер не пустой:
На выходе получим:
Если нужно искать максимум не по самому объекту, а по полю, можно передать компаратор:
Такой подход удобен для рейтингов, статистики, игр, отчётов и любых коллекций объектов.
📣 C++ Ready | #практика
Иногда нужно найти самое большое значение: максимальную цену, лучший результат, самый длинный список или наибольший score.
Допустим, есть вектор чисел:
std::vector<int> numbers = {5, 1, 9, 3};Можно искать максимум вручную:
int max_value = numbers[0];
for (int value : numbers) {
if (value > max_value) {
max_value = value;
}
}
Но в C++ для этого уже есть готовый алгоритм:
auto max_it = std::max_element(
numbers.begin(),
numbers.end()
);
std::max_element возвращает итератор на максимальный элемент.
Поэтому перед использованием лучше проверить, что контейнер не пустой:
if (max_it != numbers.end()) {
std::cout << *max_it << '\n';
}На выходе получим:
9
Если нужно искать максимум не по самому объекту, а по полю, можно передать компаратор:
auto best = std::max_element(
users.begin(),
users.end(),
[](const User& a, const User& b) {
return a.score < b.score;
}
);
Такой подход удобен для рейтингов, статистики, игр, отчётов и любых коллекций объектов.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍9🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
В этом репозитории собрана большая подборка материалов по современному C++: книги, статьи, видео, библиотеки и полезные инструменты для работы с C++11/14/17/20. Особенно полезен тем, кто хочет разобраться в STL, многопоточности, управлении памятью, шаблонах и современных практиках разработки.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤5👍3
Сидеть и работать в корпорации — страшно, жизнь-то мимо проходит. Уходить строить бизнес — страшно, а вдруг прогорит. Один из вариантов — разрабатывать свой пет-проект по вечерам. Многие успешные компании, например, Twitter, создавались именно так. Это не значит, что ваш проект обязательно заработает миллиарды, но заработать больше, чем в найме, и получить ценный опыт — вполне реально.
Перед началом разработки появляется множество вопросов, например:
• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?
В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.
Он рассказывает, где искать идею для нового проекта, что нужно знать о маркетинге, как запустить стартап и привлечь первых 10 клиентов, а также о многих других важных вещах.
Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
https://t.me/+8Frwa03ciVlhNTky
Перед началом разработки появляется множество вопросов, например:
• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?
В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.
Он рассказывает, где искать идею для нового проекта, что нужно знать о маркетинге, как запустить стартап и привлечь первых 10 клиентов, а также о многих других важных вещах.
Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
https://t.me/+8Frwa03ciVlhNTky
Telegram
Твой пет проект
Канал про то, как создать свой маленький свечной заводик
Пишу про:
- Запуски и как сделать первые 10 продаж
- Прожарка идей
- Кейсы роста и ведения проекта параллельно с работой
Автор - Михаил Табунов - @bossofyourboss
Связь @to_baza_education
Пишу про:
- Запуски и как сделать первые 10 продаж
- Прожарка идей
- Кейсы роста и ведения проекта параллельно с работой
Автор - Михаил Табунов - @bossofyourboss
Связь @to_baza_education
Удаляем элементы из vector по условию в C++20!
Допустим, есть список чисел, и нужно удалить все чётные значения.
Раньше для такой задачи часто использовали erase-remove idiom:
Код рабочий, но выглядит тяжеловато, особенно для простой операции.
В C++20 появился более прямой вариант:
Функция удалит все элементы, для которых predicate вернёт true.
После выполнения в векторе останется:
Так можно удалять не только числа, но и объекты.
Например, убрать неактивных пользователей:
Это удобно для списков задач, событий, игровых объектов, очередей обработки и любых контейнеров, где нужно почистить элементы по условию.
📣 C++ Ready | #практика
Допустим, есть список чисел, и нужно удалить все чётные значения.
std::vector<int> nums = {1, 2, 3, 4, 5};Раньше для такой задачи часто использовали erase-remove idiom:
nums.erase(
std::remove_if(nums.begin(), nums.end(), [](int x) {
return x % 2 == 0;
}),
nums.end()
);
Код рабочий, но выглядит тяжеловато, особенно для простой операции.
В C++20 появился более прямой вариант:
std::erase_if(nums, [](int x) {
return x % 2 == 0;
});Функция удалит все элементы, для которых predicate вернёт true.
После выполнения в векторе останется:
1 3 5
Так можно удалять не только числа, но и объекты.
Например, убрать неактивных пользователей:
std::erase_if(users, [](const User& user) {
return !user.active;
});Это удобно для списков задач, событий, игровых объектов, очередей обработки и любых контейнеров, где нужно почистить элементы по условию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍6🔥4
Напоминалка по std::string_view в C++!
Например, std::string_view позволяет передать строку без копирования, если функции нужно только прочитать текст.
На картинке шпаргалка по string_view: создание, доступ к символам, получение подстроки, сравнение и важные ограничения по времени жизни данных.
Сохрани, чтобы не потерять!
📣 C++ Ready | #ресурс
Например, std::string_view позволяет передать строку без копирования, если функции нужно только прочитать текст.
На картинке шпаргалка по string_view: создание, доступ к символам, получение подстроки, сравнение и важные ограничения по времени жизни данных.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤6🔥3