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

По вопросам сотрудничества: @adv_and_pr
Download Telegram
Статья Bungie о том, как они программируют такие игры, как Destiny, с использованием C++, и о правилах, которые они для этого создали.

https://www.bungie.net/7/en/News/Article/50666
std::invoke

std::invoke — это шаблонная функция, добавленная в C++17, которая позволяет вызывать произвольные объекты, как функции. Она может быть полезна в различных ситуациях, таких как вызов функций-членов, вызов лямбда-выражений и вызов функций с неизвестным типом.

Синтаксис:
std::invoke(callable, args...);


callable: объект, который будет вызван как функция. Это может быть указатель на функцию, функтор, лямбда-выражение или любой другой объект, который имеет оператор вызова().
args: аргументы, которые будут переданы callable.

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

std::placeholders — это пространство имен в стандартной библиотеке C++, которое содержит набор объектов-заполнителей (_1, _2, ..., _N), используемых при работе с функцией std::bind.

Функция std::bind позволяет связывать аргументы с функцией, создавая новый объект-функцию, который может быть вызван позже. Заполнители в std::placeholders используются для обозначения мест в списке аргументов, где будут подставлены значения при вызове нового объекта-функции.

#для_продвинутых
Создаем свою STL-совместимую реализацию std::allocator с лучшей производительностью

Реализация защиты от сбоев из-за фрагментации кучи и повышение скорости выполнения с помощью STL-альтернативы std::allocator, работающей с блоками памяти фиксированного размера.

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

Эта функция меняет местами элементы в двух диапазонах. Это может быть полезно для сортировки элементов или перемещения элементов между двумя контейнерами.

#для_начинающих
std::includes

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

#для_начинающих
Функция std::next_permutation

Функция std::next_permutation из стандартной библиотеки C++ используется для генерации следующей лексикографической перестановки элементов в диапазоне.

Функция next_permutation работает следующим образом:

1. Находит самый правый элемент, который меньше своего соседа справа.
2. Находит самый правый элемент, который больше элемента, найденного на шаге 1.
3. Меняет местами эти два элемента.
4. Сортирует оставшиеся элементы в диапазоне в возрастающем порядке.

#для_начинающих
Функция std::shuffle

Функция std::shuffle из стандартной библиотеки C++ используется для перемешивания элементов в диапазоне в случайном порядке.

Синтаксис:
std::shuffle(begin, end);


Параметры:
begin: итератор, указывающий на начало диапазона, который нужно перемешать.
end: итератор, указывающий на элемент, следующий за последним элементом, который нужно перемешать.

Описание:
Функция std::shuffle использует генератор случайных чисел для определения нового порядка элементов в диапазоне.

#для_продвинутых
Функция std::fill_n

Функция std::fill_n из заголовочного файла <algorithm> используется для заполнения заданного диапазона элементов в контейнере одним и тем же значением.

Параметры функции:
first: Итератор, указывающий на начальную позицию в диапазоне.
n: Количество элементов, которые нужно заполнить.
val: Значение, которым будут заполнены элементы.

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

Класс std::condition_variable_any представляет собой примитив синхронизации, используемый с объектом std::mutex для блокировки одного или нескольких потоков до тех пор, пока другой поток не изменит разделяемую переменную (условие) и не оповестит условную переменную.

Класс std::condition_variable_any является более общей реализацией, чем std::condition_variable. Он работает с любым типом, который можно заблокировать. Эта блокировка передается методу wait(), который освобождает мьютекс и приостанавливает поток, пока не будет получен сигнал от условной переменной.

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

Класс std::future_error представляет собой исключение, которое выбрасывается в случае ошибки при использовании функций библиотеки потоков, связанных с асинхронным выполнением и общими состояниями (std::future, std::promise и т. д.). Подобно std::system_error, это исключение содержит код ошибки, совместимый с std::error_code.

Класс std::future_error наследуется от std::logic_error и std::exception.

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

std::cerr — это объект класса std::ostream, который используется для вывода сообщений об ошибках в программе на стандартное устройство вывода ошибок (stderr).

std::cerr является членом стандартной библиотеки языка C++ и определен в заголовочном файле iostream.

Для вывода сообщения об ошибке на std::cerr можно использовать оператор << следующим образом:

std::cerr << "Ошибка: " << сообщение << std::endl;

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

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

#для_начинающих
Каковы потенциальные проблемы с использованием множественного наследования в C++ и какие механизмы языка помогают их решить?

Этот вопрос проверяет глубокое понимание кандидатом концепций наследования в C++. Множественное наследование может привести к проблемам, таким как «Алмаз смерти» (проблема, возникающая, когда два класса наследуют от одного базового класса), и усложнение иерархии классов. Ответ должен включать обсуждение таких механизмов языка, как виртуальное наследование и интерфейсы, а также рекомендации по альтернативным подходам, таким как композиция вместо наследования.
Функция iswgraph()

Функция iswgraph() является эквивалентом функции isgraph(), но для широких символов. Она проверяет, является ли wc широким символом, принадлежащим классу широких символов «graph».

Класс широких символов «graph» является подклассом широких символов «print».

Будучи подклассом класса широких символов «print», «graph» не пересекается с классом широких символов «cntrl».

Класс широких символов «graph» не пересекается с классом широких символов «space» и, следовательно, также не пересекается с его подклассом «blank».

Класс широких символов «graph» содержит все широкие символы класса «print», за исключением символа пробела. Следовательно, класс содержит широкие символы классов «alnum» и «punct».

#для_начинающих
std::piecewise_construct

std::piecewise_construct — это часть стандартной библиотеки C++ и представляет собой структуру, используемую в конструкторах некоторых контейнеров, таких как std::map и std::unordered_map, для конструирования элементов контейнера с использованием разных конструкторов для ключей и значений.

Обычно std::piecewise_construct используется вместе с методами emplace для вставки новых элементов в контейнер. Это позволяет создавать элементы контейнера, используя конструкторы ключей и значений независимо, что может быть полезным, если ключи и значения требуют разных конструкторов.

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

decltype — это ключевое слово в C++, которое используется для определения типа выражения или значения. Оно позволяет вам извлекать тип из выражения во время компиляции, что может быть полезно в ряде ситуаций, таких как определение типа переменных, создание алиасов типов и т.д. decltype полезен, когда вы хотите, чтобы тип переменной был автоматически выведен на основе типа выражения, с которым вы работаете.

decltype также может быть полезен в более сложных выражениях, включая использование операторов, а также при работе с шаблонами и обобщенным программированием.

#для_начинающих
Функция strrchr()

Функция strrchr() является частью стандартной библиотеки C и C++. Она используется для поиска последнего вхождения указанного символа в строке, представленной в виде массива символов (строки).

Параметры функции включают:

str (const char*): Указатель на строку, в которой будет выполнен поиск.
character (int): Символ, который вы ищете в строке.
Функция strrchr() возвращает указатель на последнее вхождение символа character в строке str. Если символ не найден, то функция возвращает нулевой указатель (nullptr).

#для_продвинутых
Параллельный метод сортировки массива std::thread

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

Смотреть статью
This media is not supported in your browser
VIEW IN TELEGRAM
Волновой алгоритм

Волновой алгоритм — это алгоритм поиска пути, который использует волновое распространение для определения кратчайшего пути от начальной вершины до целевой вершины.

Смотреть статью