🧠Задача о максимальной сумме подмассива (алгоритм Кадане) С++
Дан целочисленный массив, найдите в нем непрерывный подмассив с наибольшей суммой.
Например:
Мы можем легко решить эту задачу за линейное время, используя Алгоритм Кадане.
Идея состоит в том, чтобы поддерживать максимальный (с положительной суммой) подмассив, “заканчивающийся” на каждом индексе данного массива. Этот подмассив либо пуст (в этом случае его сумма равна нулю), либо состоит на один элемент больше, чем максимальный подмассив, оканчивающийся на предыдущем индексе.
Алгоритм может быть реализован следующим образом на C++:
результат:
The maximum sum of a contiguous subarray is 6
Временная сложность приведенного выше решения равна O(n) и не требует дополнительного места, где n это размер ввода.
Приведенный выше код не обрабатывает случай, когда все элементы массива отрицательные. Если массив содержит все отрицательные значения, ответом является максимальный элемент. Мы можем легко разместить эту проверку перед тем, как продолжить алгоритм. Реализацию можно увидеть ниже на C++:
Продолжение
@cpluspluc
Дан целочисленный массив, найдите в нем непрерывный подмассив с наибольшей суммой.
Например:
Input: {-2, 1, -3, 4, -1, 2, 1, -5, 4}
Output: Subarray with the largest sum is {4, -1, 2, 1} with sum 6.
Мы можем легко решить эту задачу за линейное время, используя Алгоритм Кадане.
Идея состоит в том, чтобы поддерживать максимальный (с положительной суммой) подмассив, “заканчивающийся” на каждом индексе данного массива. Этот подмассив либо пуст (в этом случае его сумма равна нулю), либо состоит на один элемент больше, чем максимальный подмассив, оканчивающийся на предыдущем индексе.
Алгоритм может быть реализован следующим образом на C++:
#include <iostream>
#include <vector>
using namespace std;
// Функция для нахождения максимальной суммы непрерывного подмассива
// в заданном целочисленном массиве
int kadane(vector<int> const &arr)
{
// сохраняет максимальный суммарный подмассив, найденный на данный момент
int max_so_far = 0;
// сохраняет максимальную сумму подмассива, заканчивающегося на текущей позиции
int max_ending_here = 0;
// обход заданного массива
for (int i = 0; i < arr.size(); i++)
{
// обновить максимальную сумму подмассива, "заканчивающегося" на индексе "i" (путем добавления
// текущий элемент до максимальной суммы, заканчивающейся на предыдущем индексе 'i-1')
max_ending_here = max_ending_here + arr[i];
// если максимальная сумма отрицательна, устанавливаем ее в 0 (что представляет
// пустой подмассив)
max_ending_here = max(max_ending_here, 0);
// обновить результат, если текущая сумма подмассива окажется больше
max_so_far = max(max_so_far, max_ending_here);
}
return max_so_far;
}
int main()
{
vector<int> arr = { -2, 1, -3, 4, -1, 2, 1, -5, 4 };
cout << "The maximum sum of a contiguous subarray is " << kadane(arr);
return 0;
}
результат:
The maximum sum of a contiguous subarray is 6
Временная сложность приведенного выше решения равна O(n) и не требует дополнительного места, где n это размер ввода.
Приведенный выше код не обрабатывает случай, когда все элементы массива отрицательные. Если массив содержит все отрицательные значения, ответом является максимальный элемент. Мы можем легко разместить эту проверку перед тем, как продолжить алгоритм. Реализацию можно увидеть ниже на C++:
Продолжение
@cpluspluc
❤7👍6🔥3🍌1
Dlib - это современный инструментарий C++, содержащий алгоритмы машинного обучения и инструменты для создания сложного программного обеспечения на C++ для решения широкого спектра задач.
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍3❤2
📌 Задача палиндром наибольшей длины, полученный с помощью соединений из слов, состоящих из двух букв.
Сложность: Средняя
Условие задачи: дан массив строк, каждый элемент которого состоит из двух букв английского алфавита в нижнем регистре.
Необходимо создать палиндром наибольшей длины путем выбора некоторых элементов из массива строк и компаниовки их в любом порядке. Каждый элемент массива можно использовать не более одного раза.
В ответе надо вернуть длину такого палидрома.
Палиндром - строка, которая одинаково читаются слева направо и справа налево.
Пример:
Ввод:
Вывод: 6
Объяснение: lc" + "gg" + "cl" = "lcggcl" или же "clgglc", но оба имеют максимальную длину 6.
Ввод:
Объяснение: "ty" + "lc" + "cl" + "yt" = "tylcclyt" или "lcyttycl"
Ввод:
Вывод: 2
Решение
Пишите свое решение в комментариях👇
@cpluspluc
Сложность: Средняя
Условие задачи: дан массив строк, каждый элемент которого состоит из двух букв английского алфавита в нижнем регистре.
Необходимо создать палиндром наибольшей длины путем выбора некоторых элементов из массива строк и компаниовки их в любом порядке. Каждый элемент массива можно использовать не более одного раза.
В ответе надо вернуть длину такого палидрома.
Палиндром - строка, которая одинаково читаются слева направо и справа налево.
Пример:
Ввод:
words = ["lc","cl","gg"]
Вывод: 6
Объяснение: lc" + "gg" + "cl" = "lcggcl" или же "clgglc", но оба имеют максимальную длину 6.
Ввод:
words = ["ab","ty","yt","lc","cl","ab"]
Вывод: 8 Объяснение: "ty" + "lc" + "cl" + "yt" = "tylcclyt" или "lcyttycl"
Ввод:
words = ["cc","ll","xx"]
Вывод: 2
Решение
Пишите свое решение в комментариях👇
@cpluspluc
👍11🔥5❤1
Что выведет код ?
@cpluspluc
using namespace std;
class A{
public:
A(){
cout<<"Constructor called\n";
}
~A(){
cout<<"Destructor called\n";
}
};
int main(int argc, char const *argv[])
{
A *a = new A[5];
delete[] a;
return 0;
}
@cpluspluc
👍5❤3🔥1
Что выведет код ?
Anonymous Quiz
11%
Segmentation fault
49%
“Constructor called” 5 раз затем“Destructor called” 5 раз
24%
“Constructor called” 5 раз и “Destructor called” один раз
16%
Error
❤9👍5🔥2
Redis – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом.
Redis plus plus - это клиентская библиотека C++ для работы с Redis.
git clone https://github.com/redis-developer/redis-plus-plus-modules.git
cd redis-plus-plus-modules
./bootstrap.sh
./configure
make -j8
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4❤3
💡Задача: На языке C++ создайте собственную реализацию интеллектуального указателя с автоматическим управлением памятью.
Интеллектуальный указатель является вариантом обычного указателя, который обеспечивает безопасность путем автоматического управления памятью. Такой указатель предотвращает возникновение проблем, таких как «висячие» указатели, «утечки» памяти и отказы в выделении памяти. Он также отслеживает количество ссылок на указанный объект для эффективного управления памятью.
Впервые это может показаться сложной задачей, особенно для тех, кто не является экспертом в языке C++.
📌 Решение
Пишите свое решение в комментариях👇
@cpluspluc
Интеллектуальный указатель является вариантом обычного указателя, который обеспечивает безопасность путем автоматического управления памятью. Такой указатель предотвращает возникновение проблем, таких как «висячие» указатели, «утечки» памяти и отказы в выделении памяти. Он также отслеживает количество ссылок на указанный объект для эффективного управления памятью.
Впервые это может показаться сложной задачей, особенно для тех, кто не является экспертом в языке C++.
📌 Решение
Пишите свое решение в комментариях👇
@cpluspluc
🔥11👍6❤1
💡Задача на перегрузку функций в C++, которая может оказаться сложнее, чем выглядит.
Предположим, у нас есть два класса:
Что выведут два следующих куска кода и почему?
Ответ:
Не все так просто, как кажется на первый взгляд. Если для вас эта задача показалась легкой, то проверьте свои навыки в C++, прочитав решение.
- В первом случае программа завершится с ошибкой.
- Во втором случае выведется «Родительский класс».
Мы имеем дело с механизмом перегрузки функций и скрытия имен. В первом случае функция внутри производного класса переопределит родительские функции вне зависимости от их сигнатуры. Поэтому, несмотря на то, что в родительском классе имеется функция, соответствующая вызываемой внутри main(), компилятор об этом не узнает и выдаст ошибку
error: no matching function for call to 'Derived::print()'
Почему же во втором случае мы не получаем ошибку, хотя также используем объект Derived для вызова print()?
Ключевым моментом здесь является то, что поиск имени начинается с класса, указанного в типе переменной, а не фактического типа объекта. Переменная derived типа Parent указывает на объект типа Derived, поэтому изначально поиск функции print() будет производиться внутри класса Parent. Вследствие этого компиляция завершается успешно и мы получаем соответствующий вывод.
Пишите свое решение в комментариях👇
@cpluspluc
Предположим, у нас есть два класса:
class Parent {
public:
virtual void print() {
std::cout << "Родительский класс" << std::endl;
}
};
class Derived : public Parent {
public:
virtual void print(int x) {
std::cout << "Производный класс" << std::endl;
}
};
Что выведут два следующих куска кода и почему?
int main() {
Derived *derived = new Derived;
derived -> print();
return 0;
}
int main() {
Parent *derived = new Derived;
derived -> print();
return 0;
}
Ответ:
- В первом случае программа завершится с ошибкой.
- Во втором случае выведется «Родительский класс».
Мы имеем дело с механизмом перегрузки функций и скрытия имен. В первом случае функция внутри производного класса переопределит родительские функции вне зависимости от их сигнатуры. Поэтому, несмотря на то, что в родительском классе имеется функция, соответствующая вызываемой внутри main(), компилятор об этом не узнает и выдаст ошибку
error: no matching function for call to 'Derived::print()'
Почему же во втором случае мы не получаем ошибку, хотя также используем объект Derived для вызова print()?
Ключевым моментом здесь является то, что поиск имени начинается с класса, указанного в типе переменной, а не фактического типа объекта. Переменная derived типа Parent указывает на объект типа Derived, поэтому изначально поиск функции print() будет производиться внутри класса Parent. Вследствие этого компиляция завершается успешно и мы получаем соответствующий вывод.
Пишите свое решение в комментариях👇
@cpluspluc
👍19❤6🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
🎮 Hypersomnia - интересный проект для пркатики на C++. Hypersomnia - онлайн-шутер с видом сверху, доступный как бесплатное ПО.
▪ Игра разрабатывается как MMO с RPG элементами.
▪ Версии игры доступны для Windows, GNU/Linux и MacOS и имеют небольшой размер загрузки - только 25 МБ.
В игре представлено множество видов огнестрельного оружия, гранат, оружия ближнего боя и магических заклинаний. Разработчики также включили редактор карт, позволяющий создавать и играть на персонализированных картах со своими друзьями.
▪ Код
@cpluspluc
▪ Игра разрабатывается как MMO с RPG элементами.
▪ Версии игры доступны для Windows, GNU/Linux и MacOS и имеют небольшой размер загрузки - только 25 МБ.
В игре представлено множество видов огнестрельного оружия, гранат, оружия ближнего боя и магических заклинаний. Разработчики также включили редактор карт, позволяющий создавать и играть на персонализированных картах со своими друзьями.
▪ Код
@cpluspluc
👍16❤4🔥2
Параллельный метод сортировки массива std:🧵
Распараллеливание на уровне данных. Принцип "Разделяй и властвуй".
Алгоритмы последовательных сортировок в прямом виде достаточно сложены для распараллеливания. Поэтому прибегают к стратегии «разделяй и властвуй».
Принцип «разделяй и властвуй» является одной из фундаментальных стратегий в разработке параллельных алгоритмов. Он заключается в разбиении задачи на более мелкие подзадачи, решение которых происходит независимо, а затем объединении результатов этих подзадач для получения окончательного результата.
Принцип «разделяй и властвуй» широко применяется в параллельных вычислениях, чтобы увеличить производительность и эффективность выполнения задач. Он основан на идее, что сложную задачу можно эффективно решить, разбив ее на несколько более простых подзадач, которые могут быть выполнены параллельно.
Процесс параллельного распараллеливания «разделяй и властвуй» включает следующие шаги:
Разделение. Исходная задача разбивается на несколько меньших и независимых подзадач. Это может быть сделано путем разделения данных, декомпозиции пространства поиска или другими методами, в зависимости от конкретной задачи.
Властвование. Каждая подзадача решается независимо и параллельно. Каждая подзадача может быть выполнена на своем собственном процессоре, ядре или узле в вычислительном кластере.
Объединение. Результаты выполнения подзадач объединяются для получения окончательного результата. Этот шаг может включать слияние данных, комбинирование результатов или другие операции, в зависимости от характера задачи.
Принцип «разделяй и властвуй» позволяет распараллелить задачи, которые имеют хорошо определенную структуру и могут быть разбиты на независимые подзадачи. Он обеспечивает возможность эффективного использования параллельных вычислительных ресурсов и ускоряет выполнение задач, особенно для больших объемов данных или вычислительно сложных алгоритмов.
▪Читать дальше
@cpluspluc
Распараллеливание на уровне данных. Принцип "Разделяй и властвуй".
Алгоритмы последовательных сортировок в прямом виде достаточно сложены для распараллеливания. Поэтому прибегают к стратегии «разделяй и властвуй».
Принцип «разделяй и властвуй» является одной из фундаментальных стратегий в разработке параллельных алгоритмов. Он заключается в разбиении задачи на более мелкие подзадачи, решение которых происходит независимо, а затем объединении результатов этих подзадач для получения окончательного результата.
Принцип «разделяй и властвуй» широко применяется в параллельных вычислениях, чтобы увеличить производительность и эффективность выполнения задач. Он основан на идее, что сложную задачу можно эффективно решить, разбив ее на несколько более простых подзадач, которые могут быть выполнены параллельно.
Процесс параллельного распараллеливания «разделяй и властвуй» включает следующие шаги:
Разделение. Исходная задача разбивается на несколько меньших и независимых подзадач. Это может быть сделано путем разделения данных, декомпозиции пространства поиска или другими методами, в зависимости от конкретной задачи.
Властвование. Каждая подзадача решается независимо и параллельно. Каждая подзадача может быть выполнена на своем собственном процессоре, ядре или узле в вычислительном кластере.
Объединение. Результаты выполнения подзадач объединяются для получения окончательного результата. Этот шаг может включать слияние данных, комбинирование результатов или другие операции, в зависимости от характера задачи.
Принцип «разделяй и властвуй» позволяет распараллелить задачи, которые имеют хорошо определенную структуру и могут быть разбиты на независимые подзадачи. Он обеспечивает возможность эффективного использования параллельных вычислительных ресурсов и ускоряет выполнение задач, особенно для больших объемов данных или вычислительно сложных алгоритмов.
▪Читать дальше
@cpluspluc
👍13🔥4❤2👌1
📌 Что выведет код ?
▪Ответ
▪Деструкторы в С++
В приведенной выше программе id - статическая переменная, и она увеличивается при каждом создании объекта. Объект a[0] создается первым, но первым уничтожается объект a[2]. Объекты всегда уничтожаются в порядке, обратном их созданию. Причина обратного порядка заключается в том, что объект, созданный позже, может использовать ранее созданный объект.
@cpluspluc
#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;
}
▪Ответ
▪Деструкторы в С++
@cpluspluc
👍20🔥5❤2👎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
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🎄2❤1
Media is too big
VIEW IN TELEGRAM
В докладе проиллюстрированы возможности современного C++, которые мы применяем в production-коде.
- Контейнеры, диапазоны, алгоритмы
- Смарт-пойнтеры, optional, variant
- Поддержка функциональной парадигмы программирования
#cpp #код
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2❤1😐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
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🔥4❤2🎉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
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
🇬🇧Английский: t.me/english_forprogrammers
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3❤1🤡1
📌 Простые программы на 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👍4❤3🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡ Основные алгоритмы на графах
Рассмотрим основные алгоритмы на графах и их реализацию на C++.
Рассматриваемые алгоритмы
▪Обход графа в ширину (Поиск в ширину) aka BFS | Breadth First Search
▪Обход графа в глубину (Поиск в глубину) aka DFS | Depth First Search
▪Алгоритм Дейкстры
▪Алгоритм Флойда-Уоршелла
▪Алгоритм Прима
📌Статья
@cpluspluc
Рассмотрим основные алгоритмы на графах и их реализацию на C++.
Рассматриваемые алгоритмы
▪Обход графа в ширину (Поиск в ширину) aka BFS | Breadth First Search
▪Обход графа в глубину (Поиск в глубину) aka DFS | Depth First Search
▪Алгоритм Дейкстры
▪Алгоритм Флойда-Уоршелла
▪Алгоритм Прима
📌Статья
@cpluspluc
👍15🔥3❤2🤮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
⚡️️ Новости и релизы
▪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
👍16❤4🔥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
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
🔥16❤6👍6👎3
Cplusplus
cplusplus.com/doc/tutorial — это популярная платформа с руководствами и уроками, которые объясняют язык C++ от его основ до новейших функций.Главы имеют практическую направленность с примерами кода во всех разделах, чтобы сразу начать практиковать то, что объясняется.
#cpp
@cpluspluc
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
Почитать:
— Определение области коллизии
— 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🔥7❤2