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

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
📁 Мощный гайдлайн по C++ от самого Страуструпа

Здесь разобраны все самые важные понятия C++

Базовые конструкции C++
— Типы данных
— Ветвления и циклы
— Векторы и строки
— Составные типы данных
— Ссылки, указатели, константность
— Функции
— Шаблоны

Стандартная библиотека C++
— Последовательные контейнеры
— Ассоциативные контейнеры
— Алгоритмы
— Адаптеры и представления

Идиомы C++
— Классы
— Шаблонные классы
— Жизненный цикл объекта
— Наследование и полиморфизм
— Обработка исключений
— Идиома RAII и умные указатели

...и ещё много всего!

🔗 Гайдлайн

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍204🔥311
🖥 Крутые фичи C++, о которых ты мог не знать

☑️Псевдонимы типов
template <typename T>
using dyn_arr = std::vector<T>;
dyn_arr<int> nums; // эквивалентно std::vector<int>

using func_ptr = int (*)(int);

Семантически похоже на использование typedef, однако псевдонимы типов легче читаются и совместимы с шаблонами С++.

☑️Пользовательские литералы
using ull = unsigned long long;

constexpr ull operator"" _KB(ull no)
{
return no * 1024;
}

constexpr ull operator"" _MB(ull no)
{
return no * (1024_KB);
}

cout<<1_KB<<endl;
cout<<5_MB<<endl;

По большей части это будут какие-нибудь реальные единицы, такие как kb, mb, км, см, рубли, доллары, евро и т.д. Пользовательские литералы позволяют вам работать с ними как с другими примитивными типами.
Очень удобно для единиц и измерения.

☑️std::initializer_list
std::pair<int, int> p = {1, 2};
std::tuple<int, int> t = {1, 2};
std::vector<int> v = {1, 2, 3, 4, 5};
std::set<int> s = {1, 2, 3, 4, 5};
std::list<int> l = {1, 2, 3, 4, 5};
std::deque<int> d = {1, 2, 3, 4, 5};

std::array<int, 5> a = {1, 2, 3, 4, 5};

Присваивайте значения контейнерам непосредственно с помощью списка инициализаторов, это справедливо и для вложенных контейнеров.

☑️auto & decltype
auto a = 3.14; // double
auto b = 1; // int
auto& c = b; // int&
auto g = new auto(123); // int*
auto x; // error -- `x` requires initializer

auto-типизированные переменные выводятся компилятором на основе типа их инициализатора

☑️Циклы for по диапазону
std::array<int, 5> a {1, 2, 3, 4, 5};
for (int& x : a) x *= 2;
// a == { 2, 4, 6, 8, 10 }


☑️Делегирование конструкторов
struct demo
{
int m_var;
demo(int var) : m_var(var) {}
demo() : demo(0) {}
};

demo d;

Конструкторы теперь могут вызывать другие конструкторы из того же класса с помощью списка инициализаторов.

Вообще, фичей у плюсов много, используй их для повышения производительности
Вот статья в тему 21 фича современного C++, которые вам обязательно пригодятся «https://habr.com/ru/companies/otus/articles/741428/»

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍134😐2
🖥 Вероятно, лучшие лекции по плюсам в Рунете от Владимирова К. И.

В этом сборнике по C++ на 600 страниц разбирается абсолютно всё, в том числе:

Основы C++:
Введение в C++
Синтаксис и структура программы на C++
Переменные, типы данных и операторы
Управляющие конструкции (условные операторы, циклы)

Функции и ООП:
Функции и их использование
Основы объектно-ориентированного программирования (ООП)
Классы и объекты
Наследование и полиморфизм

Указатели, массивы и структуры данных:
Указатели и ссылки
Динамическое выделение памяти
Массивы и строки
Стандартные шаблонные библиотеки (STL)

Исключения, обработка ошибок и шаблоны:
Исключения и обработка ошибок
Шаблоны (templates) и их применение
Обобщенное программирование

Файлы и потоки:
Работа с файлами и потоками в C++
Сериализация и десериализация данных

Многопоточное программирование:
Основы многопоточного программирования
Синхронизация потоков
Параллельные вычисления

Продвинутые темы:
Метапрограммирование
Рефлексия
Работа с внешними библиотеками (API)

🔜 PDF

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍205🔥5❤‍🔥2
🔥55😁424👍2🥰1🍌1
🖥 System2

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

https://github.com/Neko-Box-Coder/System2

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥211
🖥 Интересная задача по C++

Итак, нужно реализовать класс SmartArray (умный массив), который будет вести себя как обычный динамический массив, но при этом иметь следующие дополнительные возможности:
Автоматически увеличиваться в два раза при достижении текущего размера.
Автоматически уменьшаться в два раза, если количество элементов в массиве в 4 раза меньше, чем текущая емкость.
Поддерживать операции вставки, удаления и изменения элементов по индексу.

Придумал решение? Написал код? Тогда можешь смотреть

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20👎42🔥21
🔥Подборка лучших обучающих каналов для программистов.

➡️ Делитесь с коллегами и cохраняйте себе, чтобы не потерять

⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend

🚀 Data Science

Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data

#️⃣C#

С# академия
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа

Машинное обучение

Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
Machine Learning - полезные статьи новости гайды и разбор кода


🏆 Golang
Golang - подробные гайды, разбор кода, лучшие практики, заметки
Golang собеседование
Golang вакансии
Golang книги
Golang задачи и тесты
Golang чат
Golang news - новости go

🐍 Python

Python/django
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги

Java

Java академия
Java вакансии
Java чат
Java вопросы с собеседований
Java книги

🛢Базы данных
Sql базы данных
Библиотека баз данных
SQL чат

💻 C++

C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии

💥 Хакинг Kali Linux

Kali linux
linux_kal - kali чат
Информационная безопасность

🐧 Linux

Linux academy

🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов

📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки

🇬🇧 Английский для программистов

🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence

🔥 DevOPs
Devops для программистов
Книги Devops

🌟 Docker/Kubernets
Docker
Kubernets

📓 Книги
Библиотеки Книг для программситов

💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
🔥841👍1🥰1
🖥 Полезная подборка антипаттернов C++

60 антипаттернов и вредных советов для С++ программиста с подробными пояснениями.
В пояснениях можно найти интересную информацию.
В некоторых местах разбираются неочевидные нюансы C++; про них будет интересно почитать и опытным разработчикам.

📎 Подборка

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍171🔥1😁1
🔥 50 годных сайтов с ресурсами по изучению C++ (и C)

🟡https://www.w3schools.com/cpp/ — Туториал по C++ от W3Schools
🟡https://cppreference.com/ — Справочник по C++
🟡https://www.onlinegdb.com/ — Мой любимый компилятор и дебаггер C++
🟡https://www.hotscripts.com/category/c-cpp/scripts-programs/ — Сотни программ и скриптов на C и C++, всё удобненько разложено по категоориям
🟡https://sourceforge.net/directory/ — Больше 75К проектов, написанных на C/C++
🟡https://www.daniweb.com/tags/c/code — Полезные фрагменты кода
🟡https://programmersheaven.com/categories/candcpp Ресурсы для прокачивания плюсов
🟡https://www.codecogs.com/ CodeCogs — это совместная библиотека с открытым исходным кодом, числовые компоненты которой написаны на C/C++.
🟡https://developers.google.com/code-search/ — Поиск кода с помощью Google
🟡https://www.cis.temple.edu/~ingargio/cis71/code/ — Список простых C-шных программ, с них можно начинать изучение
🟡https://www.codeproject.com/?cat=2 — Много полезностей по C/C++

Остальные ссылки не влезают в пост, поэтому продолжение тут

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍136🔥4
TCP/IP сети и `Boost.Asio` — объяснение от Ричарда Томсона

Boost.Asio — это кроссплатформенная библиотека C++ для программирования сетей и низкоуровневого ввода-вывода, которая предоставляет разработчикам последовательную асинхронную модель с использованием современного подхода C++.

В этом видео Ричард Томсон покажет, как работать с Boost.Asio и TCP/IP. Расскажет, как реализовать клиент NNTP (Network News Transport Protocol) с помощью Boost.Asio. NNTP — это линейно-ориентированный протокол для чтения новостных статей usenet. Это даст нам представление обо всех типичных проблемах, связанных с сетевыми приложениями TCP/IP:
🔘Как преобразовать имя хоста в IP-адрес?
🔘Как установить долговременное соединение с сервером NNTP?
🔘Как обрабатывать произвольно большие объемы данных с NNTP-сервера, которые поступают асинхронно?
🔘Как координировать ввод данных пользователем с вводом/выводом NNTP?
🔘Как справляться с неожиданными сетевыми ошибками?

Очень полезное видео, рекомендую
Youtube

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍172🔥21
🖥 Чем отличаются ссылки от указателей в С++

В чем принципиальное отличие ссылки от указателя в С++? Какие ограничения есть у первых, а какие у вторых?

Вот некоторые из отличий::
🔘Нельзя объявить массив ссылок.
🔘У ссылки нет адреса.
🔘Существует арифметика указателей, но нет арифметики ссылок.
🔘Указатель может иметь «невалидное» значение с которым его можно сравнить перед использованием.

🔘Если вызывающая сторона не может не передать ссылку, то указатель может иметь специальное значение nullptr:
void f(int* num, int& num2)
{
if(num != nullptr) // if nullptr ignored algorithm
{
}
// can't check num2 on need to use or not
}


🔘Ссылка не обладает квалификатором const
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";

const int v = 10;
//int& const r = v; // Ошибка
const int& r = v;

enum
{
is_const = std::is_const<decltype(r)>::value
};

if(!is_const)
std::cout << "const int& r is not const\n";
else
std::cout << "const int& r is const\n";
}


@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥21
🔥 Супер-годный контент по работе с корутинами в С++

Напомню самую основную инфо по корутинам:
*️⃣Для объявления корутины используется ключевое слово co_return. Оно позволяет вернуть значение из корутины в вызывающий код.
*️⃣Для ожидания результата работы другой корутины используется ключевое слово co_await. Оно приостанавливает выполнение текущей корутины и передает управление вызывающему коду. Когда результат работы другой корутины готов, выполнение текущей корутины возобновляется.
*️⃣Для создания дескриптора корутины используется функция std::coroutine_handle. Она принимает указатель на функцию-корутину и возвращает объект класса std::coroutine_handle.

Ну а в этой статье ты найдёшь подробное описание разных нюансов и подводных камней, в процессе автор пишет асинхронный веб-клиент

📎 Статья

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1521🔥1🤮1
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Свежая библиотека Intel x86-simd-sort 5.0

Относительно недавно состоялся релиз открытой библиотеки Intel x86-simd-sort 5.0, в которой представлен новый API для сортировки пользовательских объектов C++ с помощью object_qsort.

Согласно тестам разработчиков проекта, новая поддержка сортировки пользовательских объектов C++ может быть в 4-5 раз быстрее, чем использование std::sort в системах AVX-512, но в конечном итоге влияние на производительность будет варьироваться в зависимости от используемых задач.

Также в выпуске x86-simd-sort 5.0 добавлен новый API-интерфейс keyvalue_qsort для сортировки массивов, представляющих пары «ключ-значение», и этот новый API тоже работает намного быстрее.

В версии x86-simd-sort 5.0 добавлена поддержка AVX2 для методов argosrt и argselect. Эти дополнения AVX2 уже вошли в исходную версию NumPy для NumPy 2.0, причем эта библиотека Python была одним из первых проектов, который добавил поддержку высокопроизводительной библиотеки Intel.

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥511
🖥 Имплементация print() на C++

🌟 Интересная статья о том, как реализовать Python-функцию print() на C++.
Автор создал C++ версию print() для отладки, назвал её cpp_dump(), и параллельно создал библиотеку cpp-dump для управления цветов и другими параметрами отображения объектов.

Функция cpp_dump() выводит разные объекты/переменные в строковом представлении, автоматически делает отступы для соответствия максимальной ширине строки.
cpp_dump() поддерживает различные другие типы, включая std::multimap и std::complex.

Можно настраивать цвета отображаемых при помощи cpp_dump() объектов.

📎 Статья

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1221🔥1
🖥 Типичная задача с собеседования C++

Написать программу, которая печатает в консоли фразу Hello world, при условии, что функция main() данной программы выглядит следующим образом:
int main() 
{
return 0;
}


Ну как, есть решение? Написали? Тогда можно смотреть.

Ответ очень прост, вариантов несколько. Самый простой, основанный на свойстве глобальных статических объектов.
На изображении это у нас С стиль.
Если нужен С++ стиль: создаем класс, в конструкторе добавляем вывод, будет вывод до main, в деструкторе - после.


@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍235🔥2