В этом сборнике по C++ на 600 страниц разбирается абсолютно всё, в том числе:
Основы C++:
Введение в C++
Синтаксис и структура программы на C++
Переменные, типы данных и операторы
Управляющие конструкции (условные операторы, циклы)
Функции и ООП:
Функции и их использование
Основы объектно-ориентированного программирования (ООП)
Классы и объекты
Наследование и полиморфизм
Указатели, массивы и структуры данных:
Указатели и ссылки
Динамическое выделение памяти
Массивы и строки
Стандартные шаблонные библиотеки (STL)
Исключения, обработка ошибок и шаблоны:
Исключения и обработка ошибок
Шаблоны (templates) и их применение
Обобщенное программирование
Файлы и потоки:
Работа с файлами и потоками в C++
Сериализация и десериализация данных
Многопоточное программирование:
Основы многопоточного программирования
Синхронизация потоков
Параллельные вычисления
Продвинутые темы:
Метапрограммирование
Рефлексия
Работа с внешними библиотеками (API)
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤5🔥5❤🔥2
Небольшая библиотека для кроссплатформенного запуска команд оболочки, которая может считывать стандартный вывод, выполнять асинхронный запуск и т.д...
https://github.com/Neko-Box-Coder/System2
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2⚡1❤1
Итак, нужно реализовать класс
SmartArray
(умный массив), который будет вести себя как обычный динамический массив, но при этом иметь следующие дополнительные возможности:Придумал решение? Написал код? Тогда можешь смотреть
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20👎4⚡2🔥2❤1
🔥Подборка лучших обучающих каналов для программистов.
➡️ Делитесь с коллегами и 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
➡️ Делитесь с коллегами и 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
🔥8❤4⚡1👍1🥰1
60 антипаттернов и вредных советов для С++ программиста с подробными пояснениями.
В пояснениях можно найти интересную информацию.
В некоторых местах разбираются неочевидные нюансы C++; про них будет интересно почитать и опытным разработчикам.
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤1🔥1😁1
https://www.w3schools.com/cpp/
— Туториал по C++ от W3Schoolshttps://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/
— Поиск кода с помощью Googlehttps://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
👍13❤6🔥4
TCP/IP сети и `Boost.Asio` — объяснение от Ричарда Томсона
В этом видео Ричард Томсон покажет, как работать с
🔘 Как преобразовать имя хоста в IP-адрес?
🔘 Как установить долговременное соединение с сервером NNTP?
🔘 Как обрабатывать произвольно большие объемы данных с NNTP-сервера, которые поступают асинхронно?
🔘 Как координировать ввод данных пользователем с вводом/выводом NNTP?
🔘 Как справляться с неожиданными сетевыми ошибками?
Очень полезное видео, рекомендую
⏩ Youtube
@cpluspluc
Boost.Asio
— это кроссплатформенная библиотека C++ для программирования сетей и низкоуровневого ввода-вывода, которая предоставляет разработчикам последовательную асинхронную модель с использованием современного подхода C++.В этом видео Ричард Томсон покажет, как работать с
Boost.Asio
и TCP/IP. Расскажет, как реализовать клиент NNTP (Network News Transport Protocol) с помощью Boost.Asio
. NNTP — это линейно-ориентированный протокол для чтения новостных статей usenet
. Это даст нам представление обо всех типичных проблемах, связанных с сетевыми приложениями TCP/IP:Очень полезное видео, рекомендую
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17⚡2🔥2❤1
В чем принципиальное отличие ссылки от указателя в С++? Какие ограничения есть у первых, а какие у вторых?
Вот некоторые из отличий::
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
👍13❤3🔥2⚡1
Напомню самую основную инфо по корутинам:
co_return
. Оно позволяет вернуть значение из корутины в вызывающий код.co_await
. Оно приостанавливает выполнение текущей корутины и передает управление вызывающему коду. Когда результат работы другой корутины готов, выполнение текущей корутины возобновляется.std::coroutine_handle
. Она принимает указатель на функцию-корутину и возвращает объект класса std::coroutine_handle
.Ну а в этой статье ты найдёшь подробное описание разных нюансов и подводных камней, в процессе автор пишет асинхронный веб-клиент
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤2⚡1🔥1🤮1
This media is not supported in your browser
VIEW IN TELEGRAM
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🔥5⚡1❤1
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
👍12❤2⚡1🔥1
Hello world
, при условии, что функция main()
данной программы выглядит следующим образом:int main()
{
return 0;
}
На изображении это у нас С стиль.
Если нужен С++ стиль: создаем класс, в конструкторе добавляем вывод, будет вывод до main, в деструкторе - после.
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤5🔥2
26 февраля 2024 года Белый дом США выпустил призыв переходить на языки программирования с безопасным доступом к памяти типа Rust. Бьёрн Страуструп, создатель языка C++, в комментарии для издания InfoWorld ответил на критику его творения.
Язык ассемблера и языки с низким уровнем абстракций по типу C и C++ поддерживают произвольную арифметику указателей с реальными адресами памяти без автоматической проверки границ, что допускает лёгкий «выстрел в ногу». Исторически сложилось, что на таких языках пишут низкоуровневые компоненты компьютерных систем: прошивки микроконтроллеров, операционные системы, критически важные и высоконагруженные приложения.
Аргументация Страструпа схожа с использованной ранее в ответе на призывы АНБ в 2022 году:
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32❤8🔥2⚡1🐳1
Представим, что вы разрабатываете приложение для калькулятора. В нём есть разные математические операции, такие как сложение, вычитание, умножение и деление. Однако, есть одна операция, которая не требует данных о конкретном экземпляре калькулятора для выполнения — это, например, операция вычисления квадратного корня. Для таких операций идеально подходят статические методы.
public class Calculator {
// Статический метод для вычисления квадратного корня
public static double squareRoot(double number) {
return Math.sqrt(number);
}
// Обычный метод для сложения
public double add(double number1, double number2) {
return number1 + number2;
}
}
Calculator
. Вы можете просто вызвать метод напрямую через имя класса:double result = Calculator.squareRoot(16); // Возвращает 4.0
static
Важно понимать, что статические переменные и методы хранятся в специальной области памяти (например, в
.data
или .bss
для C++), и их значения или состояния сохраняются на протяжении всего времени работы программы. Это делает их идеальными для хранения глобальных настроек или выполнения операций, которые не зависят от состояния объектов.— Static в C++ часто используется для определения глобальных переменных, статических членов класса и функций, ограниченных областью видимости файла. Это позволяет избежать конфликтов имен и обеспечивает более чистую структуру кода.
— Static в C# имеет более широкое применение, включая статические классы, которые не могут быть инстанциированы и содержат только статические члены. Это делает C# статические классы идеальными для создания утилит и вспомогательных методов.
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4⚡3🔥3
#include <iostream>
#include <vector>
int main() {
std::vector<int> a{0,1,2,3,4,5};
int b = 0;
std::cout << a[b + 1] << std::endl; // подчеркивает 'b+1'
return 0;
}
возникает проблема:
Арифметическое переполнение: использование оператора "+" на байтовом значении 4 и приведение результата к байтовому значению 8. Приведите значение к более широкому типу перед вызовом оператора "+", чтобы избежать переполнения (io.2)
Почему возникает такое предупреждение?
b+1
имеет тип int
. Если предположить, что в b
будет максимальное значение, представимое типом int
, то получим UB. Решение: привести хотя бы один из операндов к 64-битному типу.
В общем, компилятор ругается здесь не на конкретные значения, а на типы, используемые в выражении.
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13⚡3🔥2❤1
C и C++ имеют свои собственные встроенные генераторы случайных чисел. Они реализованы в двух отдельных функциях, которые находятся в заголовочном файле
cstdlib
:srand()
устанавливает передаваемое пользователем значение в качестве стартового. srand()
следует вызывать только один раз — в начале программы (обычно в верхней части функции main()
)rand()
генерирует следующее случайное число в последовательности. Оно будет находиться в диапазоне от 0
до RAND_MAX
(константа в cstdlib
, значением которой является 32767
).Вот пример программы, в которой используются обе эти функции:
#include <iostream>
#include <cstdlib> // для функций rand() и srand()
int main()
{
srand(4541); // устанавливаем стартовое значение - 4 541
// Выводим 100 случайных чисел
for (int count=0; count < 100; ++count)
{
std::cout << rand() << "\t";
// Если вывели 5 чисел, то вставляем символ новой строки
if ((count+1) % 5 == 0)
std::cout << "\n";
}
}
// 14867 24680 8872 25432 21865
// ...
В C++ 11 добавили тонну нового функционала для генерации случайных чисел, включая алгоритм Вихрь Мерсенна, а также разные виды генераторов случайных чисел (например, равномерные, генератор Poisson и пр.). Доступ к ним осуществляется через подключение заголовочного файла
random
. Вот пример генерации случайных чисел в C++11 с использованием Вихря Мерсенна на картинке.
Вихрь Мерсенна генерирует случайные 32-битные целые числа
unsigned
(а не 15-битные целые числа, как в случае с rand()
), что позволяет использовать гораздо больший диапазон значений. Существует также версия (
std::mt19937_64
) для генерации 64-битных целых чисел unsigned
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤3⚡1🔥1💘1