Senior C++ Developer
12.9K subscribers
1.28K photos
3 videos
580 links
№ 4931128893
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr
Download Telegram
Побитовое копирование

Побитовое копирование — это процесс создания копии объекта, при котором все биты исходного объекта копируются в целевой объект. Это означает, что все члены данных исходного объекта копируются в целевой объект, включая указатели, массивы и структуры.

В C++ побитовое копирование выполняется конструктором копирования. Если конструктор копирования не определен для класса, компилятор генерирует его неявно. Генерируемый компилятором конструктор копирования выполняет побитовое копирование всех членов данных класса.

#для_продвинутых
std::byte

std::byte — это тип данных, введенный в стандарт C++17. Он представляет собой один байт, то есть 8 бит. std::byte не является ни типом символа, ни типом числа. Он предназначен для представления байтов в памяти, независимо от того, используются они для хранения символов, чисел или чего-либо еще.

std::byte может использоваться в следующих случаях:
— Для доступа к памяти, занимаемой другими объектами.
— Для работы с низкоуровневыми функциями, такими как чтение и запись в порты ввода-вывода.
— Для реализации собственных типов данных, которые должны хранить байты.

#для_продвинутых
Быстрый парсинг 8-битных целых чисел

Смотреть статью
absl::btree

absl::btree представляет собой реализацию дерева поиска (B-tree) в библиотеке Abseil, которая предоставляет набор базовых структур данных и других полезных компонентов для C++. Abseil (или Abseil C++ Common Libraries) — это набор библиотек, разработанных Google, предназначенных для общего использования в C++ проектах.

Дерево поиска (B-tree) является структурой данных, которая используется для хранения отсортированных данных и обеспечивает эффективные операции вставки, удаления и поиска. Одним из применений B-деревьев является хранение данных в базах данных.

absl::btree предоставляет реализацию эффективного B-дерева, которое может быть использовано в ваших C++ проектах.

#для_продвинутых
Битовые поля

Битовые поля (bit fields) позволяют использовать определенное количество битов для хранения данных в структурах или классах. Это может быть полезным, если вам нужно экономить память или если вы работаете с данными, которые представляют собой битовые флаги.

#для_продвинутых
Блеск и нищета std::format

Сравнительно недавно в stdlib плюсов появилось форматирование строк «как в питоне», а точнее, как в библиотеке fmt.

Смотреть статью
std::reference_wrapper

std::reference_wrapper — это класс в C++, предоставляемый стандартной библиотекой, который оборачивает ссылку на объект. Этот класс полезен, когда вам нужно передать или хранить ссылку на объект, но вы хотите избежать неявного копирования объекта.

Основное назначение std::reference_wrapper заключается в том, чтобы позволить передавать ссылки как аргументы функций, которые обычно ожидают копии объектов. Это особенно полезно, например, при использовании алгоритмов из стандартной библиотеки, которые могут копировать элементы контейнера, если не явно указано иначе.

#для_начинающих
Узнаем количество цифр в строке

Программа запрашивает у пользователя строку и с помощью цикла for проходится по каждому символу строки. Если символ является цифрой (используя функцию isdigit), увеличивается счетчик (count). В конце программы выводится количество цифр в строке.
Находим обратный массив в C++

Один из самых быстрых вариантов обратного массива в C++ предполагает использование двух указателей для итерации по массиву. Это обеспечивает линейную сложность O(n) и примерное время выполнения алгоритма равное O(n/2).

Здесь мы создаем две переменные-указатели, start и end, которые начинаются с первого и последнего элемента соответственно. Затем мы проходим по массиву в цикле while, меняя местами элементы и увеличивая указатель start и уменьшая указатель end на каждой итерации.
Подвох с указателями на Default Subobject

Пожалуй, любой С++ разработчик на Unreal Engine имел дело с созданием Default Subobject в конструкторе. Через этот механизм, в частности, создаются компоненты по-умолчанию для акторов. Казалось бы, какие нюансы могут быть связаны с использованием такого стандартного функционала?

Смотреть статью
Алгоритм fill_n

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

Он принимает начало итератора и количество позиций n в качестве аргументов и заполняет первую позицию n , начиная с позиции, указанной параметром begin , заданным значением.

Синтаксис:
void fill_n (начало итератора, int n, значение типа);
Изменяемые лямбда-функции

Применения ключевого слова mutable используется для сохранения состояния в лямбда-функциях. Обычно оператор вызова функции замыкания является константным. Другими словами — лямбда не может модифицировать переменные, захваченные по значению.

Но ключевое слово mutable может быть применено ко всей лямбда-функции, что сделает все её переменные изменяемыми.

Следует заметить, что в отличии от mutable-переменных в объявлении класса, мутабельные лямбда-функции должны использоваться относительно редко и очень аккуратно. Сохранение состояния между вызовами лямбда-функции может быть опасным и контринтуитивным.
Алгоритм move_backward

Перемещает элементы одного итератора в другой.

Перемещение начинается с последнего элементом в указанном диапазоне и завершается первым элементом в этом диапазоне.
Функция for_each()

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

Выше приведен пример, где мы используем функцию для удвоения всех чисел в массиве.
Генерируем пароли с помощью C++

Эта программа создает константы для допустимых символов в пароле и для длины пароля. Затем она инициализирует генератор случайных чисел и генерирует пять случайных паролей.

Каждый пароль формируется путем выбора случайного символа из всего набора символов. Этот процесс повторяется до достижения желаемой длины пароля.