C++ Academy
16.5K subscribers
619 photos
127 videos
1 file
583 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🎮 Hypersomnia - интересный проект для пркатики на C++. Hypersomnia - онлайн-шутер с видом сверху, доступный как бесплатное ПО.

Игра разрабатывается как MMO с RPG элементами.

Версии игры доступны для Windows, GNU/Linux и MacOS и имеют небольшой размер загрузки - только 25 МБ.

В игре представлено множество видов огнестрельного оружия, гранат, оружия ближнего боя и магических заклинаний. Разработчики также включили редактор карт, позволяющий создавать и играть на персонализированных картах со своими друзьями.

Код

@cpluspluc
👍164🔥2
Параллельный метод сортировки массива std:🧵

Распараллеливание на уровне данных. Принцип "Разделяй и властвуй".
Алгоритмы последовательных сортировок в прямом виде достаточно сложены для распараллеливания. Поэтому прибегают к стратегии «разделяй и властвуй».

Принцип «разделяй и властвуй» является одной из фундаментальных стратегий в разработке параллельных алгоритмов. Он заключается в разбиении задачи на более мелкие подзадачи, решение которых происходит независимо, а затем объединении результатов этих подзадач для получения окончательного результата.

Принцип «разделяй и властвуй» широко применяется в параллельных вычислениях, чтобы увеличить производительность и эффективность выполнения задач. Он основан на идее, что сложную задачу можно эффективно решить, разбив ее на несколько более простых подзадач, которые могут быть выполнены параллельно.

Процесс параллельного распараллеливания «разделяй и властвуй» включает следующие шаги:

Разделение. Исходная задача разбивается на несколько меньших и независимых подзадач. Это может быть сделано путем разделения данных, декомпозиции пространства поиска или другими методами, в зависимости от конкретной задачи.

Властвование. Каждая подзадача решается независимо и параллельно. Каждая подзадача может быть выполнена на своем собственном процессоре, ядре или узле в вычислительном кластере.

Объединение. Результаты выполнения подзадач объединяются для получения окончательного результата. Этот шаг может включать слияние данных, комбинирование результатов или другие операции, в зависимости от характера задачи.

Принцип «разделяй и властвуй» позволяет распараллелить задачи, которые имеют хорошо определенную структуру и могут быть разбиты на независимые подзадачи. Он обеспечивает возможность эффективного использования параллельных вычислительных ресурсов и ускоряет выполнение задач, особенно для больших объемов данных или вычислительно сложных алгоритмов.

Читать дальше

@cpluspluc
👍13🔥42👌1
📌 Что выведет код ?

#include <iostream>
using namespace std;
class A
{
int id;
static int count;
public:
A() {
count++;
id = count;
cout << "constructor for id " << id << endl;
}
~A() {
cout << "destructor for id " << id << endl;
}
};

int A::count = 0;

int main() {
A a[3];
return 0;
}


Ответ
Деструкторы в С++

В приведенной выше программе id - статическая переменная, и она увеличивается при каждом создании объекта. Объект a[0] создается первым, но первым уничтожается объект a[2]. Объекты всегда уничтожаются в порядке, обратном их созданию. Причина обратного порядка заключается в том, что объект, созданный позже, может использовать ранее созданный объект.

@cpluspluc
👍20🔥52👎1
Media is too big
VIEW IN TELEGRAM
🔥 Отличный курс по ООП в С++: шаблоны и метапрограммирование

00:00 - Введение
02:12 - Внутреннее устройство шаблонов
03:55 - Явная специализация
06:25 - Частичная специализация
08:04 - Перегрузка и шаблоны
09:02 - Статический полиморфизм (CRTP)
12:40 - Шиблонный синглтон (CRTP)
17:57 - Основы метапрограммирования
22:17 - Заключение

🎞 Видео

#cpp #код

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥6🎄21
Media is too big
VIEW IN TELEGRAM
🖥 Алексей Малов. Как современные возможности C++ облегчают повседневную разработку

В докладе проиллюстрированы возможности современного C++, которые мы применяем в production-коде.

- Контейнеры, диапазоны, алгоритмы
- Смарт-пойнтеры, optional, variant
- Поддержка функциональной парадигмы программирования

#cpp #код

Источник

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥21😐1
Как два байта переслать: контрибьютим в KPHP

KPHP - компилятор для PHP. Он конвертирует PHP код в код на C++, компилируя который, ускоряет производительность в десятки раз. Это open-source проект, созданный ВКонтакте. Благодаря ему собирается огромный монолит ВКонтакте на 9 миллионов строк PHP кода в обычный бинарник, запуская который вы локально поднимаете полноценный ВКонтакте.

План
1. Подготовка

2. runtime
добавление функций
типы
флаги
изменение подключаемых библиотек

3. Тесты
cpp тесты
php тесты

4. pull_request

Подготовка
Устанавливаем kphp из репозитория

runtime

Добавление функций

В качестве примера возьмем ситуацию, когда нам нужно реализовать функцию mb_check_encoding из php. Первым делом идем в доки (*изображение)

Узнаем, что функция проверяет кодировку строки или массива строк. Массив строк обрабатывается рекурсивно, так что сфокусируемся на функции, работающей для строки.
Теперь идем в код php смотреть как работает функция в php:

📌Продолжение

@cpluspluc
👍10🔥42🎉1
⚡️Маст-хэв список программистов, каналы с последними книжными новинками, библиотеками, разбором кода и актуальной информацией, связанной с вашим языком программирования.
Лучший способ получать свежие обновлении и следить за трендами в разработке.

Python: t.me/pythonl
C#: t.me/csharp_ci
C/C++/ t.me/cpluscsharp
Машинное обучение: t.me/ai_machinelearning_big_data
Data Science: t.me/data_analysis_ml
Devops: t.me/devOPSitsec
Go: t.me/Golang_google
Базы данных: t.me/sqlhub
Rust: t.me/rust_code
Javascript: t.me/javascriptv
React: t.me/react_tg
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Linux: t.me/+A8jY79rcyKJlYWY6
Big Data: t.me/bigdatai
Хакинг: t.me/linuxkalii
Java: t.me/javatg

💼 Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy

🎞 YouTube канал: https://www.youtube.com/@uproger

😆ИТ-Мемы: t.me/memes_prog

🇬🇧Английский: t.me/english_forprogrammers
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31🤡1
👑 Курс по C++ и SFML

📌 Простые программы на C++
На этом уроке мы напишем пару простейших программ на C++ и посмотрим, как происходит их компиляция.

📌 Знакомство с SFML. Компьютерная графика.
SFML (Simple Fast Multimedia Library) — это C++ библиотека для мультимедиа. В статье мы воспользуемся SFML для рисования фигур в окне.

📌 Основной цикл программы. Анимация.
На уроке мы освоим паттерн Game Loop, а также научимся обрабатывать события мыши и клавиатуры.

📌 Обработка событий. Интерактив.
На уроке вы освоите обработку событий мыши и клавиатуры в мультимедийных программах и научитесь писать функции на языке С++

📌 Соглашения о кодировании на C++
Соглашения о кодировании для курса по C++/SFML

📌 Комплексные задачи. Котик следует за мышкой
В этой практике вы начнёте по шагам решать комплексные задачи, двигаясь от математической модели и псевдокода к готовой программе

📌 Массовые столкновения
На этом занятии вы научитесь программировать игры уровня Бильярда или Arkanoid

📌 Ещё одна практика на SFML
На этом занятии вы освоите более гибкие приёмы работы с SFML: виртуальную камеру, рисование произвольных фигур, проверку столкновения

📌 Основной проект курса: 2D игра
Цель проекта - самостоятельно написать комплексную программу, клон небольшой игры

📌 Задание | Спецификация проекта в виде MindMap
Чтобы составить видение проекта-игры, нужно визуализировать. Сделать это поможет MindMap.

📌 Задание | План проекта в виде RoadMap
Чтобы справиться с известным проектом в известные сроки, нужно составить план действий. Сделать это поможет RoadMap.

📌 Пишем клон игры PacMan слой за слоем
В этой коллекции примеров слой за слоем на C++/SFML воссоздаётся урезанный клон игры PacMan

📌 Схема оценки проекта-игры
В таблице записаны критерии оценки и примеры оценивания различных игр

📌 Герои Кода и Магии: анализ игрового движка VCMI
VCMI Project – игровой движок с открытым исходным кодом для Героев Меча и Магии 3. Движок VCMI является кроссплатформенным и работает на устройствах под управлением Windows, Linux, Android, macOS и iOS.

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍43🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Основные алгоритмы на графах

Рассмотрим основные алгоритмы на графах и их реализацию на C++.

Рассматриваемые алгоритмы

Обход графа в ширину (Поиск в ширину) aka BFS | Breadth First Search
Обход графа в глубину (Поиск в глубину) aka DFS | Depth First Search
Алгоритм Дейкстры
Алгоритм Флойда-Уоршелла
Алгоритм Прима

📌Статья

@cpluspluc
👍15🔥32🤮1
🔥C++ Дайджест

⚡️ Новости и релизы

vcpkg 2023.06.20, 2023.07.21 — Добавление поддержки интеграции с GitHub dependency graph, улучшение поддержки Xbox, другие улучшения и багфиксы.

CLion 2023.2 — Обновление встроенных дебаггеров, улучшение интеграции с PlatformIO, добавление AI Assistant и многое другое.

ReSharper C++ 2023.2 — Добавление AI Assistant, поддержки C++20 и C++23, операции безопасного удаления, улучшенная поддержка Unreal Engine Blueprints и другое.

Dear ImGui 1.89.8 — Небольшие изменения, багфиксы и новые демонстрационные примеры программ.

Godot 4.2 dev 2 — Добавление поддержки OpenXR API, отладки мультипоточного кода в дебаггере скриптов, багфиксы и прочее.

GCC 13.2 — Багфиксы и устранение регрессий относительно прошлых релизов.

mold 2.0.0 — Изменение лицензии с APGL на MIT и другие изменения.

📝 Статьи
Базовые алгоритмы на графах — Обзор самых популярных графовых алгоритмов с рассмотрением их реализации на C++.

Дизайн API в С++ — О правилах проектирования хороших API с рассмотрением множества примеров их практического применения.

Andreas Fertig: A strongly typed bool — Практический пример использования одного из популярных паттернов программирования, strong types, для улучшения читабельности кода и предохранения от ошибок.

Bartlomiej Filipek: Understanding Ranges Views and View Adaptors Objects in C++20/C++23 — О различиях между views и view adaptors objects в C++20 и C++23, с рассмотрением их реалзиации в MSVC's STL.

Jonathan Boccara: Usage First, Implementation After: A Principle of Software Development — О подходе к разработке через тестирование использование, и какие преимущества он может дать.

Jonathan Müller: Should we stop writing functions? — Обзор недостатков функций и преимуществ лямбд: может, функции нам больше и не нужны?

Rainer Grimm: C++23: Syntactic Sugar with Deducing This — О том, как Deducing this, нововведение C++23, устраняет необходимость в использовании Curiously Recurring Template Pattern.

Rainer Grimm: C++23: The Small Pearls in the Core Language — О небольших, но полезных нововведениях в C++23, таких как literal suffixes, if consteval и auto(x).

Raymond Chen: Perfect forwarding forwards objects, not braced things that are trying to become objects — Заметка об особенностях работы perfect forwarding.

Raymond Chen: Inside STL: The pair and the compressed pair, Inside STL: The vector, Inside STL: The string, Inside STL: The lists — Серия статей, рассматривающая особенности реализации популярных классов стандартной библиотеки в ее реализациях от clang, gcc и msvc.

Sandor Dargo: C++23: static operator() and static operator[] — Обзор двух нововведений C++23, статических operator() и operator[].

Izzy Muerte: Everything You Never Wanted to Know About CMake — О некоторых полезных трюках с использованием современного CMake.

Martin Bond: CMake Presets — Обзор cmake-presets, нововведения CMake 3.19, значительно упрощающего конфигурирование и сборку проектов.

📺 Видео
Jason Turner: C++ Weekly - Ep 386 - C++23's Lambda Attributes — Обзор одного из нововведений C++23, возможности навешивания аттрибутов на лямбды, и о том, какие вообще полезные аттрибуты существуют.

Jason Turner: C++ Weekly - SE - Interview with Stephen Berry - ODE's, Physics, constexpr, High Performance C++

Jason Turner: C++ Weekly - Ep 387 - My Customized C++ Programming Keyboard! — Обзор самодельной клавиатуры, позволяющей набирать const, constexpr и прочие ключевые слова с недостижимой ранее скоростью.

The Cherno: Instant Messaging App in C++ // Code Review — Код-ревью простенького чатика, написанного самим же автором видео.

🎙️Подкасты
CppCast: Episode 366, How CLion works under the hood — Об особенностях внутренней машинерии CLion: парсеров, семантических анализаторов и прочего, вдыхающей жизнь в весь продукт.

Algorithms + Data Structures = Programs: Episode 140: 🇨🇦 CppNorth Live 🇨🇦 Victor Ciura, Andreas Weis & More!, Episode 141: 🇨🇦 CppNorth Live 🇨🇦 Kate Gregory, Jessica Kerr & Kristen Shaker! — Интервью с полей недавно прошедшей конференции CppNorth.

@cpluspluc
👍164🔥2
Media is too big
VIEW IN TELEGRAM
Mock-собеседование С++ разработчика из Яндекс

00:00 - Введение
00:10 - Запрет создания объектов в куче в С++
01:52 - Ограничение кол-ва создаваемых объектов в С++
04:47 - Перегрузка операторов в С++
06:13 - Взаимодействие С и С++
11:42 - Строки в С++
15:31 - Исключения в С++
17:18 - Исключение в конструкторе и деструкторе в С++
21:21 - Проброс исключения из другого потока в С++
22:34 - Умные указатели в С++
25:38 - Утечки памяти с умными указателями в С++
29:09 - Контейнеры в С++
32:15 - Заключение

📌 источник

@cpluspluc
🔥166👍6👎3
Cplusplus

cplusplus.com/doc/tutorial — это популярная платформа с руководствами и уроками, которые объясняют язык C++ от его основ до новейших функций.Главы имеют практическую направленность с примерами кода во всех разделах, чтобы сразу начать практиковать то, что объясняется.

#cpp

@cpluspluc
21👍13🔥4
🟡 Дайджест полезных материалов из мира C++ за неделю

Почитать:
Определение области коллизии
Seastar как платформа для опорной сети 5G и краткое сравнение с Boost.Asio, userver и другими
Список популярных утечек с GitHub: Анализ репозиториев компаний
Выжимаем ATtiny10, практическое применение
Buran Motion Planning Framework
Правильный if для ускорения работы
C++ Дайджест #0 (24 июля 2023 – 6 августа 2023)
Импортозамещаем numpy, pandas, scipy и sklearn
Yet another UDP transport
C++: чем CRTP лучше Шаблонного Метода?
Делегирование для ООП (Design Patterns) и самый эффективный способ взаимодействия объектов
Felt Cute, Might git rm --rf
Day2-#100DaysOfCoding Challenge Update
Marshal Class in Service Oriented Architecture C++
My 1st Day of #100DaysCoding Challenge- Journey Begins!!
A Beginners Guide: Polymorphism, Virtual Functions, and Abstract Classes With C++
🕹 7 Top Online Resources to Learn C++
Why does the indexing of array start with ZERO in C?
Interacting with the Hatch Action
Interacting with Our NFTs
Using AtomicAssets in a Smart Contract

Посмотреть:
🌐Собеседование Middle C++

Хорошего дня!

@cpluspluc
👍9🔥72
Media is too big
VIEW IN TELEGRAM
Собеседование Middle 🖥

Тренировочное собеседование
на позицию Middle C++ Developer.

📌Источник

#cpp #programming #video

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥42🤔1
🖥 Первые новинки C++26: итоги летней встречи ISO

На недавней встрече комитет C++ активно взялся за C++26. Уже есть первые новинки, которые нас будут ждать в готовящемся стандарте C++:

улучшенный static_assert,
переменная _,
оптимизация и улучшение для std::to_string,
Hazard Pointer,
Read-Copy-Update (так же известное как RCU),
native_handle(),
целая вереница классов *function*,
множество доработок по constexpr,
std::submdspan,
и прочие приятные мелочи.

📌Видео конференция
📌Статья

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥641
This media is not supported in your browser
VIEW IN TELEGRAM
🐊Ghidralligator

Мультиархитектурный эмулятор pcode на языке C++, основанный на Ghidra и предназначенный для фаззинга.

Фаззинг (англ. fuzzing) — техника тестирования программного обеспечения, часто автоматическая или полуавтоматическая, заключающаяся в передаче приложению на вход неправильных, неожиданных или случайных данных.

Предметом интереса являются падения и зависания, нарушения внутренней логики и проверок в коде приложения, утечки памяти, вызванные такими данными на входе.

Фаззинг является разновидностью выборочного тестирования (random testing), часто используемого для проверки проблем безопасности в программном обеспечении и компьютерных системах.

Он позволяет выполнять фаззинг на основе эмуляции, сохраняя любые характеристики при работе с двоичными файлами, работающими на экзотических архитектурах.

git clone https://github.com/AFLplusplus/AFLplusplus
cd AFLplusplus
make distrib
sudo make install


GitHub
Документация

@cpluspluc
👍82🔥2
Media is too big
VIEW IN TELEGRAM
🖥 ТОП вопросов на С++ собеседовании | Вопросы и задачи с реальных собеседований

00:00 - Введение
02:07 - Общие вопросы на собеседовании по С++
03:46 - Стандартная библиотека С++
06:53 - Указатели в С++
07:51 - Виртуальность в С++
09:51 - Шаблоны в С++
11:52 - Заключение

📌 Источник

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥3🙏2👀2👏1
10 примеров кода на языке Си++ для решения повседневных задач программирования

1. Найти размер вектора

2. Перемешивание массива

3. Поменять местами две переменные в C++

4. Найти сумму цифр

5. Копирование вектора в другой вектор

6. Нахождение максимального и минимального элементов массива

7. Вставить элементов в множество

8. Удаление дубликатов из строки

9. Нахождение длины строки

10. Итерация по вектору

#junior #код #cpp

@cpluspluc
👍26🤣168👎4🔥4😱2🤡1