• A[8] - это то же самое, что и *(A + 8). Так как операция сложения ассоциативна, она может быть переписана как *(8 + A), что синонимично ..... 8[A]Please open Telegram to view this post
VIEW IN TELEGRAM
Использование
std::shared_mutex и std::shared_lock позволяет эффективно управлять многопоточным доступом к ресурсам, повышая производительность за счет одновременного чтения и блокирования только при записи.Это особенно полезно для сценариев, где чтение данных происходит чаще, чем запись.
Please open Telegram to view this post
VIEW IN TELEGRAM
std::shared_ptr — это умный указатель, который позволяет нескольким указателям совместно владеть одним объектом.• Когда последний std::shared_ptr, указывающий на объект, удаляется, объект также уничтожается.Please open Telegram to view this post
VIEW IN TELEGRAM
Функция std::atomic_load
Функция
Синтаксис:
#для_продвинутых
Функция
std::atomic_load используется для атомарного чтения значения из атомарной переменной. Это означает, что чтение значения происходит без риска, что оно будет изменено другим потоком во время чтения.Синтаксис:
template <class T>
T atomic_load(const volatile atomic<T>* obj) noexcept;
template <class T>
T atomic_load(const atomic<T>* obj) noexcept;
#для_продвинутых
std::scoped_lock
#для_продвинутых
std::scoped_lock — это класс-обертка над одним или несколькими мьютексами, который обеспечивает удобный механизм владения мьютексами в стиле RAII. При создании объекта std::scoped_lock он пытается захватить владение мьютексами, которые ему передаются.std::scoped_lock был добавлен в стандарт C++ в версии 17. Он является заменой устаревшего класса std::lock_guard.#для_продвинутых
std::fstream
Для использования класса
Объект класса
#для_продвинутых
std::fstream — это класс из стандартной библиотеки С++, который представляет собой поток данных, связанный с файлом. Он может использоваться для чтения, записи или одновременного чтения и записи из файла.Для использования класса
std::fstream необходимо подключить заголовочный файл fstream.Объект класса
std::fstream создается с помощью конструктора, которому передается имя файла и режим открытия. Режим открытия определяет, как будет использоваться поток.#для_продвинутых
std::future::get()
Метод
Метод
Если асинхронное вычисление было прервано или завершилось с ошибкой, метод
#для_продвинутых
Метод
std::future::get() в C++ используется для получения результата асинхронного вычисления, связанного с объектом std::future.Метод
std::future::get() блокирует текущий поток до тех пор, пока асинхронное вычисление не будет завершено. После завершения вычисления метод std::future::get() возвращает результат вычисления.Если асинхронное вычисление было прервано или завершилось с ошибкой, метод
std::future::get() бросает исключение std::future_error.#для_продвинутых
std::logic_error
Класс
#для_продвинутых
std::logic_error — это класс исключений в языке программирования C++, который используется для представления логических ошибок в программе. Логические ошибки — это ошибки, которые могут быть обнаружены до выполнения программы, например, нарушение логических предусловий или классовых инвариантов.Класс
std::logic_error является производным от класса std::exception, который является базовым классом для всех исключений в C++. Класс std::logic_error имеет конструктор, который принимает строку в качестве аргумента. Эта строка используется для описания ошибки.#для_продвинутых
std::error_code
Код ошибки представляет собой платформо-зависимый код, который возвращается операционной системой при возникновении ошибки. Категория ошибки представляет собой более общий код, который может быть использован для классификации ошибок.
#для_продвинутых
std::error_code — это класс в стандартном C++, который используется для представления ошибок. Он содержит два компонента: код ошибки, представляющий собой целое число, и категорию ошибки, представляющую собой строку.Код ошибки представляет собой платформо-зависимый код, который возвращается операционной системой при возникновении ошибки. Категория ошибки представляет собой более общий код, который может быть использован для классификации ошибок.
#для_продвинутых
std::promise
Когда создается объект
Поставщик использует методы
#для_продвинутых
std::promise — это шаблонный класс, который предоставляет механизм для связи потока, который обещает предоставить значение в будущем (поставщик), с потоком, который ожидает получение этого значения (потребитель).Когда создается объект
std::promise, он создает связанный объект std::future. Объект std::future предоставляет интерфейс для получения значения или исключения, которое будет предоставлено объектом std::promise.Поставщик использует методы
set_value() или set_exception() для установки значения или исключения, которое будет предоставлено объекту std::promise. Потребитель использует метод get() объекта std::future для получения значения или исключения, которое было установлено поставщиком.#для_продвинутых
std::span
Тип
#для_продвинутых
std::span — это шаблонный класс, который представляет собой непрерывное представление последовательности объектов. Он был введен в стандарт С++20 и предоставляет безопасный и эффективный способ доступа к элементам такой последовательности.Тип
std::span имеет два шаблонных параметра:T — тип элементов последовательности.Extent — количество элементов последовательности. Если этот параметр не указан, то он считается равным dynamic_extent, что означает, что количество элементов не известно заранее.#для_продвинутых
std::duration
Шаблонный класс
— Количество периодов (tick count) типа Rep.
— Период тика (tick period), который представляет собой дробное число секунд, приходящееся на один тик.
Стандартная библиотека C++ предоставляет ряд предопределенных типов интервалов времени, таких как seconds, minutes, hours, days, weeks, months и years. Эти типы имеют следующие значения периода тика (2 картинка).
#для_начинающих
Шаблонный класс
std::duration в С++ представляет собой интервал времени. Он состоит из двух частей:— Количество периодов (tick count) типа Rep.
— Период тика (tick period), который представляет собой дробное число секунд, приходящееся на один тик.
Стандартная библиотека C++ предоставляет ряд предопределенных типов интервалов времени, таких как seconds, minutes, hours, days, weeks, months и years. Эти типы имеют следующие значения периода тика (2 картинка).
#для_начинающих
std::nexttoward()
Функция
Функция принимает два аргумента:
Если оба аргумента равны, функция возвращает y, преобразованное к типу возвращаемого значения.
Возвращаемое значение:
Следующее представимое значение после
Если
#для_продвинутых
Функция
std::nexttoward() возвращает следующее представимое значение после x в направлении y. Эта функция ведет себя аналогично функции std::nextafter(), но с потенциально более точным y.Функция принимает два аргумента:
x — базовое значениеy — значение, к которому приближается возвращаемое значениеЕсли оба аргумента равны, функция возвращает y, преобразованное к типу возвращаемого значения.
Возвращаемое значение:
Следующее представимое значение после
x в направлении y.Если
x — это наибольшее конечное значение, представимое в типе, и результат бесконечен или не представим, возникает ошибка переполнения диапазона.#для_продвинутых
Функция std::adjacent_difference()
Функция
Сигнатура функции:
#для_продвинутых
Функция
std::adjacent_difference() из библиотеки стандартных алгоритмов C++ вычисляет последовательные различия между каждым элементом и его предшественником в входном диапазоне. Результаты выводятся в диапазон назначения.Сигнатура функции:
template <class InputIt, class OutputIt>
OutputIt adjacent_difference(InputIt first, InputIt last, OutputIt d_first);
#для_продвинутых
std::greater
Шаблон
Функциональный объект
#для_продвинутых
Шаблон
std::greater представляет собой функциональный объект, который используется для сравнения двух объектов по возрастанию. Он является базовым классом для всех функциональных объектов, которые выполняют сравнение по возрастанию, например, std::less, std::greater_equal, std::less_equal.Функциональный объект
std::greater имеет один метод, operator(), который принимает два аргумента типа T и возвращает значение типа bool. Значение true возвращается, если первый аргумент больше второго, и значение false — в противном случае.#для_продвинутых
std::utility
Одним из наиболее важных шаблонов в
#для_продвинутых
std::utility — это пространство имен в стандартном заголовочном файле <utility>, которое содержит шаблоны функций и классов, которые предоставляют различные полезные утилиты для работы с данными.Одним из наиболее важных шаблонов в
std::utility является шаблон класса pair, который представляет собой пару значений. pair может использоваться для хранения двух значений любого типа.#для_продвинутых
Функция strlen()
Функция
Синтаксис функции
Аргументы:
Возвращаемое значение:
Количество символов в строке, включая нулевой символ
Функция
strlen() в языке программирования C++ используется для определения длины строки. Она принимает в качестве аргумента указатель на строку и возвращает значение типа size_t, которое представляет собой количество символов в строке, включая нулевой символ \0, который завершает строку.Синтаксис функции
strlen():size_t strlen(const char* str);
Аргументы:
str — указатель на строку, длина которой должна быть определена.Возвращаемое значение:
Количество символов в строке, включая нулевой символ
\0.std::sort
Начальный итератор — указывает на начало диапазона элементов, который необходимо отсортировать.
Конечный итератор — указывает на конец диапазона элементов, который необходимо отсортировать.
Компаратор — функция, которая определяет, какой элемент из двух меньше или равен другому.
Если компаратор не указан, то функция использует стандартную лексикографическую сортировку.
#для_продвинутых
std::sort — это функция стандартной библиотеки C++, которая сортирует диапазон элементов. Функция принимает три параметра:Начальный итератор — указывает на начало диапазона элементов, который необходимо отсортировать.
Конечный итератор — указывает на конец диапазона элементов, который необходимо отсортировать.
Компаратор — функция, которая определяет, какой элемент из двух меньше или равен другому.
Если компаратор не указан, то функция использует стандартную лексикографическую сортировку.
#для_продвинутых
std::semaphore
В примере на картинке два потока пытаются получить доступ к ресурсу. Первый поток получает доступ к ресурсу, используя
#для_продвинутых
std::semaphore — это класс шаблона в C++ <semaphore>, представляющий собой примитив синхронизации, который позволяет контролировать доступ к совместно используемым ресурсам. В отличие от std::mutex, std::semaphore позволяет более чем одному потоку одновременно обращаться к одному и тому же ресурсу, но не более, чем указано в конструкторе.std::semaphore имеет два основных метода:acquire() — блокирует поток, пока значение счетчика семафора не станет ненулевым.release() — увеличивает значение счетчика семафора на единицу.В примере на картинке два потока пытаются получить доступ к ресурсу. Первый поток получает доступ к ресурсу, используя
acquire(), и освобождает его, используя release(). Второй поток также пытается получить доступ к ресурсу, но блокируется, пока первый поток не освободит его. После того, как первый поток освободит ресурс, второй поток также сможет получить к нему доступ.#для_продвинутых
input_iterator
В C++ понятие итератора используется для доступа к элементам контейнера. Итераторы могут быть разных типов, каждый из которых имеет свои собственные свойства и ограничения.
Итератор
Итераторы
— Они должны поддерживать оператор *, который возвращает значение элемента, на который указывает итератор.
— Они должны поддерживать оператор ++, который перемещает итератор на следующий элемент контейнера.
#для_начинающих
В C++ понятие итератора используется для доступа к элементам контейнера. Итераторы могут быть разных типов, каждый из которых имеет свои собственные свойства и ограничения.
Итератор
input_iterator представляет собой итератор, который может только читать значения элементов контейнера. Он не может их изменять.Итераторы
input_iterator должны удовлетворять следующим требованиям:— Они должны поддерживать оператор *, который возвращает значение элемента, на который указывает итератор.
— Они должны поддерживать оператор ++, который перемещает итератор на следующий элемент контейнера.
#для_начинающих