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
🔥17❤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
👍11❤7🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Изоляция рунета произошла быстрее, чем ты думал
Роскомнадзору воспользовался карт-бланшем на блокировку, а «белые списки» сайтов внедрены уже во всех регионах. И гайки будут закручиваться только сильнее.
Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.
Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.
Не жди момента «Х». Перестрахуйся подпиской.
Loading …
██████████████] 99%
Роскомнадзору воспользовался карт-бланшем на блокировку, а «белые списки» сайтов внедрены уже во всех регионах. И гайки будут закручиваться только сильнее.
Чтобы в одночасье не лишиться доступа к свободному Интернету, просто сохрани Only Hack.
Тут профессиональный хакер делится фишками, с которыми доступ к глобальной сети у тебя будет даже в случае ядерного апокалипсиса.
Не жди момента «Х». Перестрахуйся подпиской.
👎8😁2
Менять vector во время обхода это плохая идея!
На первый взгляд код выглядит безобидно: идём по элементам и добавляем новые.
Но у std::vector есть важная особенность: при добавлении элементов он может перевыделить память.
То есть старый внутренний массив станет неактуальным, элементы переедут в новое место, а итераторы, ссылки и указатели могут стать недействительными.
Range-based for внутри тоже использует итераторы.
Поэтому менять размер vector во время такого обхода — опасный сценарий.
Лучше сначала запомнить исходный размер:
Теперь цикл обходит только старые элементы, а новые добавляются в конец и не влияют на количество итераций.
Если заранее понятно, сколько элементов добавится, можно ещё подготовить память:
Это уменьшит шанс лишних перевыделений.
Такая ошибка часто появляется при обработке очередей задач, графов, списков событий или генерации новых элементов на основе старых.
📣 C++ Ready | #совет
На первый взгляд код выглядит безобидно: идём по элементам и добавляем новые.
std::vector<int> v = {1, 2, 3};
for (int x : v) {
v.push_back(x);
}Но у std::vector есть важная особенность: при добавлении элементов он может перевыделить память.
То есть старый внутренний массив станет неактуальным, элементы переедут в новое место, а итераторы, ссылки и указатели могут стать недействительными.
Range-based for внутри тоже использует итераторы.
Поэтому менять размер vector во время такого обхода — опасный сценарий.
Лучше сначала запомнить исходный размер:
std::size_t n = v.size();
for (std::size_t i = 0; i < n; ++i) {
v.push_back(v[i]);
}
Теперь цикл обходит только старые элементы, а новые добавляются в конец и не влияют на количество итераций.
Если заранее понятно, сколько элементов добавится, можно ещё подготовить память:
v.reserve(v.size() * 2);
Это уменьшит шанс лишних перевыделений.
Такая ошибка часто появляется при обработке очередей задач, графов, списков событий или генерации новых элементов на основе старых.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤3👍3