Полезные материалы по всему, что может быть полезно плюсовику/сишнику.
Безопасная работа с массивами? Нет, не слышали
Рано или поздно любому разработчику на С-подобном языке приходит в голову идея использовать двумерный массив как одномерный. Причины для этого всегда разные, а вот результат чаще всего один. В этой небольшой заметке разберём эту сомнительную технику и какие проблемы она может привнести в вашу программу.
https://habr.com/ru/companies/pvs-studio/articles/895208/
#cpp #programming
👉 @cpp_lib
Сортировка слиянием на CUDA
Я решил изучить, как повысится производительность алгоритмов сортировки при их реализации на CUDA. Моя цель — понять, как можно использовать мощь параллельных вычислений для ускорения алгоритмов сортировки.
В качестве тестового я возьму алгоритм сортировки слиянием (merge sort), потому что он удобно разбивает задачу на меньшие подзадачи с двумя равными половинами, что хорошо подходит для параллельных вычислений.
https://ashwanirathee.com/blog/2025/sort2/
#cpp #programming
👉 @cpp_lib
❓Хотите стать C#-разработчиком, но боитесь, что будет сложно?
Подготовьтесь заранее и освойте Git — ключевой инструмент командной разработки!
На открытом вебинаре 31 марта в 20:00 мск разберем:
◽️ Систему контроля версий
◽️ Основные команды
◽️ Принципы работы с репозиториями
◽️ Эти знания помогут вам уверенно работать в команде и подготовиться к следующему этапу.
С Git вы сможете эффективно управлять кодом, вести проекты и двигаться к позиции Junior и Middle.
🔗 Регистрируйтесь на вебинар и 🎁 получите скидку на большое обучение «C# Developer»: https://vk.cc/cKgE7g
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Алгоритмы на С/С++
Задача о Ханойской башне
Быстрая сортировка (quick sort)
Бинарный поиск в отсортированном массиве
Сортировка методом выбора
Сортировка методом пузырька
Минимизация просмотров в методе сортировки пузырьком
Модифицированный метод пузырька
Сортировка методом вставок
Шейкер - сортировка
источник
#cpp #programming
👉 @cpp_lib
👨💻 Если вы хотите основательно изучить C++, ресурс LearnCpp — один из лучших бесплатных онлайн-курсов по современному C++.
Сайт охватывает:
- Основы языка (переменные, типы данных, управление потоком, функции)
- Указатели, ссылки и динамическое выделение памяти
- Работа с массивами, строками и контейнерами STL
- ООП: классы, наследование, полиморфизм, инкапсуляция
- Современные фичи C++11/14/17/20: smart pointers, lambdas, auto, ranged for, structured bindings
- Обработка исключений
- Пространства имён, шаблоны, перегрузка операторов
- Управление ресурсами (RAII)
- Работа с файлами
- Продвинутые темы: многопоточность, move-семантика, constexpr и др.
Все главы структурированы в логическом порядке, с практическими примерами, пояснениями и заданиями. Сайт постоянно обновляется, чтобы соответствовать актуальным стандартам языка.
📚 Отличный выбор для как новичков, так и опытных разработчиков, желающих освежить знания по современному C++.
https://www.learncpp.com/
#cpp #programming
👉 @cpp_lib
Как написать 2D игру на C++ и чистом STL для терминала в Linux
Привет, Хабр, я PHP разработчик с опытом работы в продакшне более 8 лет. После долгого и упорного труда мне стало скучно пилить микросервисы и бэкенды в хайлоде, я решил постичь магию разработки игр. Выбрал курс по Unreal Engine 5 и C++, так как там все структурировано, понятно, и в случае необходимости есть кому задать вопрос. На первой лекции по основам С++ преподаватель сразу предложил челлендж - написать 2D игру без использования игрового движка. Идея мне понравилась и я сразу приступил к реализации.
https://habr.com/ru/post/708486/
#cpp #programming
👉 @cpp_lib
⚡️Асинхронность без сложных потоков? В C++20 это возможно. Корутины позволяют выполнять задачи параллельно без создания лишних потоков, экономя ресурсы и упрощая код.
На открытом вебинаре 27 марта в 20:00 мск разберём, как co_await и co_yield работают в современных C++-проектах, где применяются в реальных задачах и почему это важно для высоконагруженных систем. Разберём практические примеры из сетевого программирования и обработки данных.
Освойте новую парадигму асинхронности, избавьтесь от проблем с потоками и сделайте свой код проще и быстрее. Вы научитесь внедрять корутины в свои проекты, разберётесь в новшествах C++20/23 и сможете использовать их в продакшене.
👉Регистрируйтесь и получите скидку на большое обучение «C++ Developer. Professional»: https://vk.cc/cK8je9Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Три теоремы о сортировках
Я знаю многих программистов и руководителей в IT компаниях, которые недолюбливают математиков и в частности считают их далёкими от жизни идиотами из-за их утверждений в духе "нельзя отсортировать последовательность быстрее, чем за nlogn" -- ведь это очевидным образом неверно, есть же сортировка подсчетом и radix sort.
Нюанс в том, что описанное выше -- это распространённая некорректная трактовка одной из ключевых теорем об алгоритмах сортировок, корректное утверждение выглядит так: "не существует алгоритма, который бы гарантированно находил перестановку n элементов, приводящую к возрастающему порядку, быстрее чем за nlogn используя только операции попарного сравнения". В этом утверждении больше слов, оно более сложно в плане когнитивного восприятия, ключевой момент обозначил жирным шрифтом, чувствуете разницу?
https://habr.com/ru/hubs/cpp/articles/
#cpp #programming
👉 @cpp_lib
Лекции С++ продвинутый поток ФПМИ 2023-24
Лекция 1. Введение в язык C++. Основные типы и операции над ними
Лекция 2. Основные команды в терминале. Компиляция программ
Лекция 3. Объявления и определения, области видимости, пространства имен
Лекция 4. Выражения и операторы. Управляющие конструкции
Лекция 5. Compile-time errors, runtime errors, undefined behavior
Лекция 6. Указатели
Лекция 7. Стековая, статическая и динамическая память
Лекция 8. Массивы, функции и указатели на функции
источник
#cpp #programming
👉 @cpp_lib
Время разобраться с std::chrono
Видео о std::chrono, в котором представлен обзор функциональности, добавленной в C++11, C++17 и C++20. Посмотрите, чтобы узнать, какую часть chrono поддерживает ваш компилятор. Мы были очень удивлены тем, что обнаружили.
источник
#cpp #programming
👉 @cpp_lib
Базовый курс C++ (MIPT, ILab)
Lecture 1. Scent of C++.
Lecture 2. Указатели и ссылки
Lecture 3. Имена и сущности
Lecture 4. Инициализация и копирование.
Lecture 5. RAII и перемещение
Lecture 6. Приведение типов
Lecture 7. Перегрузка операторов
Lecture 8. Наследование и полиморфизм
Lecture 9. Множественное наследование
Lecture 10. Языки и грамматики
источник
#cpp #programming
👉 @cpp_lib
Пишем калькулятор на C++ с SFML
Привет, коллеги и доброжелательные критики! Сегодня я решил отвлечься от своей громоздкой работы, чтобы написать что-то простое, но с изюминкой — калькулятор с графическим интерфейсом на C++20 и SFML. Этот проект — не претензия на что-то грандиозное, а скорее лёгкий эксперимент, чтобы вспомнить, как приятно писать код, который сразу видно на экране. Заодно я поделюсь с вами своими мыслями, подходами и парой советов. Давайте разберём, как я это закрутил и почему выбрал именно SFML.
https://habr.com/ru/articles/891354/
#cpp #programming
👉 @cpp_lib
Улучшенные версии STL-контейнеров из библиотеки Boost
Илья Мещерин
В любом учебном курсе по C++, даже начального уровня, обязательно изучают, как устроен std::vector
. Детали внутреннего устройства std::vector в подробностях продолжают изучать в вузах, спрашивать на собеседованиях, обсуждать на конференциях. То же самое происходит с контейнерами std::list
, std::deque
, std::map
и std::unordered_map: про их реализацию и особенности внутреннего устройства можно говорить бесконечно долго, про них все еще делают доклады, снимают лекции и пишут статьи. И их продолжают использовать в продакшен-коде даже в самых крупных и известных компаниях.
При этом в библиотеке Boost давным-давно есть альтернативные версии контейнеров, которые выигрывают у стандартных по многим показателям. Однако об этих версиях почти никто не знает, о них почти нет лекций, статей и докладов. Пора положить этому конец и разобраться в том, как еще могут быть устроены контейнеры, помимо тех версий из STL, о которых и так все знают.
Спикер обсудил внутреннее устройство не таких уж стандартных контейнеров: stable_vector
, devector
, bimap
, circular_buffer
, а также интрузивных версий list
, map
, unordered_map
и их разновидностей.
источник
#cpp #programming
👉 @cpp_lib
📌 5 способов ускорить компиляцию C++ проекта
Всем доброго вечера, или утра✌️Компиляция C++ — боль, особенно на больших проектах. Сегодня расскажу, как ускорить этот процесс.
🚀 1. Используйте ccache
🔹 ccache
кеширует результаты компиляции и повторно использует их при неизменности исходного кода.
🔹 Установка (Linux/macOS):
sudo apt install ccache # для Ubuntu
brew install ccache # для macOS
export CC="ccache g++"
export CXX="ccache g++"
-j
в make
make -jN
, где N
— количество потоков. Например:
make -j$(nproc) # на Linux
make -j$(sysctl -n hw.ncpu) # на macOS
pch
(предкомпилированные заголовки) .cpp
файлах, создайте pch
файл:
// stdafx.h
#include <iostream>
#include <vector>
#include <map>
g++ -o stdafx.pch stdafx.h
stdafx.pch
вместо кучи инклудов.Unity Build
(объединение нескольких .cpp
в один). Release
с оптимизациями -O2
или -O3
, если важна скорость. -Og
:
g++ -Og -g main.cpp -o main
C++ Russia 2025 — конференция с техническими докладами про перформанс, оптимизации, многопоточность и инструменты С++
🧑💻 13 марта онлайн
📍 20–21 марта в Москве в отеле «МонАрх»
Вас ждут 39 докладов от 47 спикеров о многопоточности, новых стандартах, компиляторах и неочевидных нюансах C++.
Практикующие инженеры и техлиды разберут:
→ Оптимизации userver: неожиданные способы ускорения shared_ptr, экономии памяти и балансировки.
→ Type erasure в деталях: как оборачивать полиморфные объекты со «стертыми» типами.
→ Branch prediction: как работает спекулятивное исполнение и как оптимизировать код в критических местах.
Больше докладов — в расписании.
Билеты уже на сайте. Если оплачиваете самостоятельно — промокод CPPLIB
дает скидку 15% на билеты «Для частных лиц».
Реклама. ООО «Джуг Ру Груп». ИНН 7801341446
Магия ИИ в разработке приложений на Qt – попробуйте сами!
ИИ – это не просто тренд, а мощный инструмент, который может упростить разработку, автоматизировать рутину и даже помогать создавать ассеты для приложений. Хотите узнать, как это работает на Qt?
📅 3 апреля в 20:00 (мск) приглашаем на открытый вебинар, на котором разберёмся, как LLM-модели могут:
✅ Упрощать работу с Qt, автоматизируя рутинные задачи
✅ Помогать писать тесты при помощи QtTest
✅ Создавать ассеты и взаимодействовать с кодом
🚀 Что получите?
✔️ Инструменты для работы с ИИ в Qt
✔️ Практический опыт использования LLM в разработке
✔️ Видение того, где и как ИИ может вам помочь
Присоединяйтесь и попробуйте магию ИИ в деле! 🧑💻🔥
👉 Регистрируйтесь по ссылке: https://vk.cc/cKhmuP
Бесплатное занятие приурочено к старту курса Разработка прикладного ПО на Qt и ОС «Аврора», обучение на котором позволит освоить кросс-платформенный фреймворк Qt.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🧵 STL Renderer — это простой рендерер STL-файлов, написанный с использованием C++, OpenGL и Dear ImGui.
🔹 Функции:
- Загрузка и визуализация STL-файлов (как ASCII, так и бинарных)
- Управление камерой: вращение, масштабирование, перемещение
- Интеграция с Dear ImGui для графического интерфейса
📦 Сборка:
Проект использует CMake и требует следующих зависимостей:
- OpenGL
- GLFW
- GLAD
- Dear ImGui
🚀 Отличный старт для тех, кто хочет разобраться, как визуализировать 3D-модели в формате STL с помощью OpenGL и создать минимальный интерфейс управления сценой.
https://github.com/SynrgStudio/STL-Renderer
#cpp #programming
👉 @cpp_lib
Основы С++
C++. Урок 1. Введение
C++. Урок 2. Обзор редактора
C++. Урок 3. Процедурный стиль программирования
C++. Урок 4. Динамическая память
C++. Урок 5. Отличия С и C++
C++. Урок 6. ООП. Инкапсуляция классов
С++. Урок 7. Наследование + статический полиморфизм
C++. Урок 8. Динамический полиморфизм
C++. Урок 9. Классификация полиморфизма
C++. Урок 10. Обработка исключений
#cpp #programming
👉 @cpp_lib
👩💻 Тест по языку С
Проверь насколько хорошо ты знаешь Си !
Ответишь — пройдешь на продвинутый курс «Программист С» от OTUS по специальной цене.
⏱ Время прохождения теста ограничено 30 минут
➡️ ПРОЙТИ ТЕСТ
На курсе ты освоишь практические навыки программирования на С, научишься решать задачи уровня Middle+.
Курс доступен в рассрочку.
🎁 Скидки в честь Дня Рождения Otus и дополнительный промокод на скидку PROGC_5 (до 31.03)
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
⚡️Молниеносный оффер в Kaspersky
C++ Fast Track — онлайн-ивент, где можно получить оффер за пару дней.
Для участия: только резюме и присутствие на технической онлайн-встрече с командой. Удобный день и время подберёте вместе с рекрутером.
Кого ждём: С++ разработчики Junior+ / Middle / Middle+ / Senior (опыт от 3-х лет).
Как проходит тех. интервью:
- 2 часа (возможно, быстрее)
- 2 наших эксперта
- никакого leet code, cppreference — да.
Когда: 31 марта — 4 апреля
Подать заявку: https://kas.pr/9sm6?erid=2W5zFFy8z3r
Шеф, всё пропало
Ошибки программистов C++ — это отдельный вид искусства, вроде бы простой язык, но стоит отвлечься на чашечку кофе, как компилятор начинает вываливать простыню ворнингов пополам с ошибками, и иногда это больше похоже на древнеегипетские письмена, чем на нормальный выхлоп. Вы наверное и сами не раз сталкивались с разыменованием nullptr или перепутали (= и ==) по недосмотру. Часто причиной ошибкой является лень или невнимательность, или усталость - не зря появились суеверия "не комитить в пятницу вечером", "не кодить в состоянии изменного сознания" или "избегать кода под кофейным угаром", ну это когда три-четыре кружечки кофе навернул и пошел нести добрый код направо и налево.
https://habr.com/ru/articles/848662/
#cpp #programming
👉 @cpp_lib
О том, как легкомысленное использование полиморфных аллокаторов может испортить вам жизнь
Вы хотите идти в ногу со временем и перевести ваш проект на полиморфные аллокаторы? Вас не могут отговорить от этого даже затраты на виртуальные вызовы? Тогда вы просто обязаны знать о нюансах с лайфтаймом, и почему нельзя просто взять и поменять свои контейнеры на аналоги из пространства имён pmr.
Давайте предположим для примера, что вы работаете в биологической лаборатории. Вам поставили задачу разработать приложение, которое позволяло бы симулировать жизненный цикл каких-нибудь бактерий. Соответственно, у вас в проекте есть класс, описывающий бактерию. При этом каждой бактерии принадлежит набор генов. Это могло бы выглядеть следующим образом:
class Bacteria
{
private:
using gene_type = TheGene;
using genes_container = std::vector<gene_type>;
private:
static genes_container RandomGenes();
public:
Bacteria() = default;
Bacteria(const Bacteria&) = default;
Bacteria(Bacteria&&) = default;
Bacteria& operator = (const Bacteria&) = default;
Bacteria& operator = (Bacteria&&) = default;
~Bacteria() = default;
public:
void MutateRandomGene();
Bacteria Clone() const;
/* something else ... */
private:
genes_container m_genes = RandomGenes();
};
❤️ Backend Talks от Яндекс 360
17 апреля, Москва, 19:00
Поговорим про три основы, без которых невозможно создавать высоконагруженные сервисы для миллионной аудитории: инфраструктура, архитектура и команда.
В программе:
📌На пути к 9999: принципы и практики построения высоконагруженных сервисов — Игорь Обручев, руководитель группы SRE
📌Эволюция проектирования общих решений в Яндекс 360 — Евгений Ширанков, руководитель команды платформенных сервисов
📌Ценности и культура команды. Почему они важны и как их сохранить в период роста — Роман Акинфеев, руководитель бэкенд-разработки Яндекс 360
Команда Яндекс 360 работает с нагрузками >1 000 000+ RPS и создает продукты которыми пользуются 95+ млн человек каждый месяц — Диск, Почта, Телемост, Мессенджер и другие.
🍻Приходите на митап обсуждать инженерные практики, качественно нетворкаться с разработчиками и классно провести время!
Регистрируйтесь
#вакансия #удалённо #parttime #remote #parttime #C++ #преподаватель
🦉 OTUS ищет преподавателей на онлайн-курс: С++ Developer Professional
Мы расширяем команду экспертов (уже более 600 человек). Преподавательский опыт не обязателен — мы научим вас всему, что нужно!
Требуется:
- Опыт коммерческой разработки на C++ от 3 лет. Опыт многопоточного и асинхронного программирования.
Обязанности:
- подготовиться к занятиям (темы на выбор, материалы предоставляются)
- преподавать в mts-link.ru, уделяя большое внимание практике. Здесь вы сможете развивать навыки публичных выступлений, работы с аудиторией и подачи обратной связи.
Условия:
✅ гибкий график, легко совмещать с основной работой, занятия в вечернее время;
✅ оплата от 4000 до 6000 руб. за 1,5 часа занятия;
✅ бонусы: доступ к нашим курсам, нетворкинг, развитие личного бренда, бесплатные воркшопы и конференции для наших преподавателей.
Обсудить подробнее: @candyfox24
Хотите прокачать навыки DevOps и успешно вкатиться в IT? Начните с актуального инструмента!
GitLab CI/CD — один из ключевых инструментов для автоматизации разработки. Его используют в компаниях от стартапов до корпораций.
На курсе «CI/CD на основе GitLab» вы научитесь развертывать пайплайны, настраивать CI/CD-процессы и работать с Docker и Kubernetes.
🔗 Пройдите вступительное тестирование и получите скидку на обучение. Ваш путь в DevOps начинается здесь
https://vk.cc/cJQpYd
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📌 Оптимизация кода: убираем лишние копирования в C++
Сегодня я покажу вам, как неочевидные копирования объектов могут замедлять ваш код и как этого избежать.
Проблема: Лишние копирования
Допустим, у нас есть функция, которая возвращает std::vector<int>
:
std::vector<int> getVector() {
std::vector<int> v = {1, 2, 3, 4, 5};
return v; // Возвращаем объект
}
void process() {
std::vector<int> data = getVector(); // Возможное копирование
}
std::vector<int> getVector(bool flag) {
if (flag) {
std::vector<int> v1 = {1, 2, 3, 4, 5};
return v1; // NRVO сработает
} else {
return {6, 7, 8, 9, 10}; // Но здесь объект создается временно и потом копируется!
}
}
std::move
или std::optional
:
std::vector<int> getVector(bool flag) {
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = {6, 7, 8, 9, 10};
return flag ? std::move(v1) : std::move(v2); // Гарантируем перемещение
}
std::optional
(полезно, если отсутствие значения — валидный вариант):
std::optional<std::vector<int>> getVector(bool flag) {
if (!flag) return std::nullopt;
return std::vector<int>{1, 2, 3, 4, 5};
}
std::move
, если данные больше не нужны. 😮💨Устали вручную разруливать зависимости в C++ проектах? Время автоматизировать процесс! 🕒💻
Пакетные менеджеры Conan и vcpkg позволяют легко управлять библиотеками, устанавливать зависимости и ускорять сборку. Разберем, как это работает, на открытом уроке.
Упростите себе жизнь: научитесь использовать пакетные менеджеры, чтобы писать код, а не разбираться с проблемами сборки.
Спикер Денис Злобин — старший инженер-программист в Astra Linux, опытный наставник разработчиков.
➡️Встречаемся 20 марта в 20:00 мск, разберем всё на практике! Участники получат скидку на большое обучение по разработке на С++.
Регистрация: https://vk.cc/cJOUIw
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👩💻 C — это фундамент программирования, а не просто язык.
Если вы хотите работать с производительностью, встроенными системами и взаимодействием с ОС — пора его освоить
В OTUS в рамках онлайн-курса «Программист С» пройдут бесплатные вебинары для разработчиков, админов и IoT-специалистов:
📌11 марта (вт) в 20:00 мск — открытый урок «Практический Си: Разрабатываем игру-викторину» научит вас работать с памятью, использовать стандартную библиотеку и создавать полноценные консольные приложения.
➡️ Регистрация: https://vk.cc/cJpRPx
📌24 марта(пн) в 20:00 мск — открытый урок «Язык и алгоритмы: Увлекательное путешествие в лексический анализ на C».
Разработаем простое приложение для лексического анализа простейшего языка программирования на языке С и рассмотрим:
-Основные алгоритмы и технологии создания приложений для лексического анализа.
-Области применения лексического анализа и особенности реализации.
-Поиск и определение ошибок в тексте.
➡️Регистрация: https://vk.cc/cJpRPx
Не упустите возможность протестировать курс и познакомиться с экспертами. Полный курс можно будет оплатить любым удобным для вас способом. Для участия нужно пройти тест на странице с описанием курса.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Плывущий экран. Вирус на C++. Melting Screen
Программа предоставлена в образовательных целях! Автор не несёт ответственности за её использование!
В этом видео вы узнаете как написать вирус на с++ который заставляет экран сыпаться и плыть.
источник
#cpp #programming
👉 @cpp_lib
Алгоритмы манипуляций с битами
В статье приведены алгоритмы обработки коротких битовых строк, обычно вмещающихся в машинное слово, в большей степени эти алгоритмы предназначены для обработки строк длины 32 или 64, но многие из них можно применять для SIMD инструкций или даже GPU.
https://habr.com/ru/articles/886182/
#cpp #programming
👉 @cpp_lib