C++ Academy
12.7K subscribers
237 photos
77 videos
262 links
По всем вопросам- @workakkk
Download Telegram
🖥 Супер годная и свежайшая лекция от МФТИ

Здесь рассказывается о RISC-V, о процессе сборки C++ кода, о том, что происходит в ходе компиляции под капотом, про оптимизацию программ, про ассемблер, линкер и ещё про много всего

*RISC-V — открытая и свободная система команд и процессорная архитектура на основе концепции RISC (reduced instruction set computer)

Доступ по закрытой ссылке, оцените)
🔗 Youtube

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что нужно учитывать, используя std::vector?

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

std::vector имеет:

Доступ к произвольному элементу за O(1).

Проблема: При превышении capacity — долгая вставка нового элемента (даже в конец), требующая поэлементного копирования.

Решение: С этим можно побороться, если зарезервировать заранее всю нужную память под все элементы, но мы редко знаем каким будет максимальное количество элементов. И памяти на все процессы так не напасёшься, даже учитывая оптимизацию современных ОС: когда ОС физически выделяет память только когда процесс начинает её использовать.


Хороший cache coherence:
В общем случае это означает более быстрый обход контейнера vector по сравнению с контейнерами а-ля list (map, set, forward_list etc).

Проблема: В частности, нужно разбираться с cache sharing.
Если vector параллельно обходят два потока и каждый из них модифицирует его содержимое, то вероятно кэши этих потоков будет смотреть на смежную область памяти vector-а. Тогда каждая из записей будет инвалидировать содержимое кеша ядра другого потока, тем самым приводя к регулярному refetch-у. В некоторых корнер кейсах замена vector на list может внезапно привести к улучшению перфоманса.

Решение: Лечится такая проблема обычно увеличением размера элемента до размера кешлайна. Либо же выдачей каждому потоку по N элементов, где (N * sizeof(ElementT)) == cacheline size.

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
В какой строке есть ошибка компиляции?
Anonymous Quiz
31%
Во всех
16%
1
16%
2
17%
3
20%
Ни в какой
🖥 Не стоит проверять результат вызова malloc с помощью assert

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

Функция malloc возвращает нулевой указатель, если невозможно выделить буфер памяти указанного размера. Поэтому прежде, чем разыменовать указатель, его нужно проверить на равенство NULL, например так:
int *ptr = malloc(sizeof(int) * N);
if (!ptr)
{
// Обработка ошибки выделения памяти
}


🔗 Подробнее можно почитать тут

@cpluspluc
Please open Telegram to view this post
VIEW IN 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
🖥 Крутые фичи 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
🖥 Вероятно, лучшие лекции по плюсам в Рунете от Владимирова К. И.

В этом сборнике по 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
🖥 System2

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

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

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

➡️ Делитесь с коллегами и 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