Параллельный метод сортировки массива std::thread
Алгоритмы последовательных сортировок в прямом виде достаточно сложены для распараллеливания. Поэтому прибегают к стратегии «разделяй и властвуй».
Смотреть статью
Алгоритмы последовательных сортировок в прямом виде достаточно сложены для распараллеливания. Поэтому прибегают к стратегии «разделяй и властвуй».
Смотреть статью
This media is not supported in your browser
VIEW IN TELEGRAM
Волновой алгоритм
Волновой алгоритм — это алгоритм поиска пути, который использует волновое распространение для определения кратчайшего пути от начальной вершины до целевой вершины.
Смотреть статью
Волновой алгоритм — это алгоритм поиска пути, который использует волновое распространение для определения кратчайшего пути от начальной вершины до целевой вершины.
Смотреть статью
Функция std::upper_bound
Функция
Прототип функции
Функция
#для_продвинутых
Функция
std::upper_bound используется для нахождения позиции, на которой должен быть вставлен элемент в упорядоченном контейнере (например, векторе или массиве) так, чтобы порядок элементов оставался неизменным. Она работает с помощью двоичного поиска и является частью библиотеки стандартных шаблонов C++ (STL).Прототип функции
std::upper_bound выглядит следующим образом:template <class ForwardIt, class T>Здесь:
ForwardIt upper_bound(ForwardIt first, ForwardIt last, const T& value);
first — итератор, указывающий на начало диапазона элементов.last — итератор, указывающий на конец диапазона элементов.value — значение, для которого вы ищете верхнюю границу.Функция
std::upper_bound возвращает итератор, указывающий на первый элемент в диапазоне, который больше value. Если все элементы в диапазоне меньше или равны value, то она вернет last.#для_продвинутых
Запрещаем наследование класса
Чтобы запретить наследование от класса, вы можете использовать ключевое слово
Заметьте, что использование
#для_начинающих
Чтобы запретить наследование от класса, вы можете использовать ключевое слово
final в объявлении класса. Ключевое слово final указывает, что класс не может быть унаследован. Заметьте, что использование
final ограничивает только наследование от данного класса, и это не означает, что его методы не могут быть переопределены в производных классах. Если вы хотите запретить переопределение методов класса, вы можете использовать ключевое слово final перед объявлением метода.#для_начинающих
Многопоточность на C++
Поток исполнения - независимая последовательность выполнения инструкций внутри одного процесса с общей памятью, но собственными регистрами и стеком.
Смотреть статью
Поток исполнения - независимая последовательность выполнения инструкций внутри одного процесса с общей памятью, но собственными регистрами и стеком.
Смотреть статью
reinterpret_cast
Синтаксис
#для_продвинутых
reinterpret_cast — это один из четырех операторов приведения типов в C++, которые используются для выполнения различных видов приведения типов. reinterpret_cast позволяет выполнить "пересмотр" типа, что означает, что он преобразует указатель или ссылку на один тип в указатель или ссылку на другой тип без каких-либо проверок или преобразований значений. Он используется для выполнения неявных преобразований между различными типами данных, и может привести к неопределенному поведению, если не используется осторожно.Синтаксис
reinterpret_cast выглядит так:new_type = reinterpret_cast<new_type>(expression);Где
new_type — это тип, в который вы хотите преобразовать expression, и expression — это значение или выражение, которое вы хотите преобразовать.#для_продвинутых
std::bad_any_cast
#для_продвинутых
std::bad_any_cast — это исключение (exception) в C++, которое возникает, когда происходит неудачное приведение типа (какие-либо приведения, которые осуществляются с использованием std::any) и тип данных, на который пытается быть приведен объект, не соответствует ожидаемому типу.std::any — это класс в стандартной библиотеке C++, который позволяет хранить значения разных типов данных внутри одного объекта. Это особенно удобно, когда вам нужно хранить значения разных типов в одной коллекции или передавать их между функциями.#для_продвинутых
Exception safety guarantee
Exception safety guarantee (гарантия безопасности исключений) — это концепция, которая определяет, каким образом объекты и ресурсы управляются во время генерации и обработки исключений, чтобы предотвратить утечки памяти и другие нежелательные побочные эффекты. Exception safety guarantee определяет, как хорошо библиотечные или пользовательские функции справляются с исключениями и обеспечивают корректное состояние программы в случае возникновения исключения.
#для_продвинутых
Exception safety guarantee (гарантия безопасности исключений) — это концепция, которая определяет, каким образом объекты и ресурсы управляются во время генерации и обработки исключений, чтобы предотвратить утечки памяти и другие нежелательные побочные эффекты. Exception safety guarantee определяет, как хорошо библиотечные или пользовательские функции справляются с исключениями и обеспечивают корректное состояние программы в случае возникновения исключения.
#для_продвинутых
Функторы
Функтор — это сокращение от функциональный объект, представляющий собой конструкцию, позволяющую использовать объект класса как функцию. В C++ для определения функтора достаточно описать класс, в котором переопределена операция ().
Выгода функтора состоит в том, что:
а). Его можно параметризовать при создании объекта (перед вызовом) используя конструктор объекта с параметрами/
б). Может создаваться временный объект исключительно на время выполнения функционального вызова.
#для_начинающих
Функтор — это сокращение от функциональный объект, представляющий собой конструкцию, позволяющую использовать объект класса как функцию. В C++ для определения функтора достаточно описать класс, в котором переопределена операция ().
Выгода функтора состоит в том, что:
а). Его можно параметризовать при создании объекта (перед вызовом) используя конструктор объекта с параметрами/
б). Может создаваться временный объект исключительно на время выполнения функционального вызова.
#для_начинающих
std::launch::async
#для_продвинутых
std::launch::async — это одна из опций, доступных при создании объекта std::launch::async | std::launch::deferred в контексте создания потоков с использованием стандартной библиотеки C++ (поддерживается начиная с C++11). Эта опция определяет, каким образом будет запущена функция в новом потоке, когда вы используете std::async.std::launch::async указывает на то, что функция должна быть немедленно запущена в отдельном потоке (асинхронно). Это означает, что она выполнится в фоновом режиме и может начать выполнение даже до того, как объект std::future, возвращаемый std::async, будет использован для получения результата выполнения функции. В этом случае система управляет тем, как и когда будет создан новый поток.#для_продвинутых
Бьёрн Страуструп: что в C++ надо было сделать по-другому, зачем его учить и совет начинающим программистам
Смотреть статью
Смотреть статью
Tproger
Бьёрн Страуструп: что в C++ надо было сделать по-другому, зачем его учить и совет начинающим программистам
Создатель C++ делится, что бы он поменял в C++, если бы у него была машина времени, зачем учить C++ в 2020 году и что нужно знать начинающему программисту.
Как написать чит для кс го за 30 секунд на c++
В этом видео вы узнаете как написать чит для кс го за 30 секунд на языке программирования c++ и это очень хороший и обучающий туториал по написанию читов для кс го и не только
Смотреть видео
В этом видео вы узнаете как написать чит для кс го за 30 секунд на языке программирования c++ и это очень хороший и обучающий туториал по написанию читов для кс го и не только
Смотреть видео
В чем проблема со следующим кодом?
Поведение не определено, потому что деструктор A не является виртуальным.
class A
{
public:
A() {}
~A(){}
};
class B: public A
{
public:
B():A(){}
~B(){}
};
int main(void)
{
A* a = new B();
delete a;
}
Происхождение и эволюция аллокатора памяти в С
Подсистема памяти - это часть т.н. C Runtime или CRT, отвечающая за работу с памятью. Библиотека CRT служит посредником между прикладной программой и ядром операционной системы. Соответственно, её внешним интерфейсом является “стандартная библиотека С”, внутренний интерфейс специфичен для конкретной ОС.
Смотреть статью
Подсистема памяти - это часть т.н. C Runtime или CRT, отвечающая за работу с памятью. Библиотека CRT служит посредником между прикладной программой и ядром операционной системы. Соответственно, её внешним интерфейсом является “стандартная библиотека С”, внутренний интерфейс специфичен для конкретной ОС.
Смотреть статью
Что такое std::stack?
Хорошей аналогией может быть сравнение со стопкой предметов, например, стопкой тарелок:
— Добавление элемента: Тарелки добавляются сверху.
— Удаление элемента: Тарелки снимаются сверху.
#для_начинающих
std::stack — это класс, представляющий собой стек, структуру данных, которая работает по принципу LIFO (last-in first-out или "последний вошел — первым вышел"). Это означает, что первым всегда извлекается последний добавленный элемент.Хорошей аналогией может быть сравнение со стопкой предметов, например, стопкой тарелок:
— Добавление элемента: Тарелки добавляются сверху.
— Удаление элемента: Тарелки снимаются сверху.
#для_начинающих
std::decay
#для_продвинутых
std::decay — это шаблонная метафункция в C++, которая применяется для преобразования типа к его «распадающемуся» типу. Это означает, что она удаляет все модификаторы const, volatile, ссылки и cv-квалификаторы, а также преобразует массивы в указатели на их элементы.#для_продвинутых
std::launder
Функция
Функция
Что такое алиасинг?
Алиасинг — это ситуация, когда два или более указателя ссылаются на один и тот же объект в памяти.
Что такое строгий алиасинг?
Строгий алиасинг — это правило компилятора, которое запрещает модифицировать объект через указатель одного типа, если он был получен через указатель другого типа.
#для_продвинутых
Функция
std::launder была добавлена в C++17 для решения проблем, связанных с алиасингом и строгим алиасингом.Функция
std::launder используется для того, чтобы преобразовать указатель одного типа в указатель другого типа, не нарушая при этом правила строгого алиасинга.Что такое алиасинг?
Алиасинг — это ситуация, когда два или более указателя ссылаются на один и тот же объект в памяти.
Что такое строгий алиасинг?
Строгий алиасинг — это правило компилятора, которое запрещает модифицировать объект через указатель одного типа, если он был получен через указатель другого типа.
#для_продвинутых