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

По вопросам сотрудничества: @adv_and_pr
Download 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 определяет, как хорошо библиотечные или пользовательские функции справляются с исключениями и обеспечивают корректное состояние программы в случае возникновения исключения.

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

Функтор — это сокращение от функциональный объект, представляющий собой конструкцию, позволяющую использовать объект класса как функцию. В 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, будет использован для получения результата выполнения функции. В этом случае система управляет тем, как и когда будет создан новый поток.

#для_продвинутых
Алгоритм swap_ranges

Совершает обмен элементами между диапазоном [first1, last1) и другим диапазоном, начинающимся с first2.
Алгоритм is_partitioned

Используется для определения того, разделен ли диапазон [first, last) или нет. Говорят, что диапазон разделен относительно условия, если все элементы, для которых условие оценивается как истинное, предшествуют тем, для которых оно является ложным.
Как написать чит для кс го за 30 секунд на c++

В этом видео вы узнаете как написать чит для кс го за 30 секунд на языке программирования c++ и это очень хороший и обучающий туториал по написанию читов для кс го и не только

Смотреть видео
В чем проблема со следующим кодом?

class A
{
public:
A() {}
~A(){}
};

class B: public A
{
public:
B():A(){}
~B(){}
};

int main(void)
{
A* a = new B();
delete a;
}

Поведение не определено, потому что деструктор A не является виртуальным.
Происхождение и эволюция аллокатора памяти в С

Подсистема памяти - это часть т.н. 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 используется для того, чтобы преобразовать указатель одного типа в указатель другого типа, не нарушая при этом правила строгого алиасинга.

Что такое алиасинг?
Алиасинг — это ситуация, когда два или более указателя ссылаются на один и тот же объект в памяти.

Что такое строгий алиасинг?
Строгий алиасинг — это правило компилятора, которое запрещает модифицировать объект через указатель одного типа, если он был получен через указатель другого типа.

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

Функция std::getline в C++ используется для чтения строк из потока ввода, обычно с клавиатуры. Она является частью стандартной библиотеки C++ (iostream) и позволяет считывать строки, содержащие пробелы, в отличие от оператора извлечения (>>), который останавливается на первом пробеле.

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

Функция std::inplace_merge в библиотеке C++ <algorithm> предназначена для объединения двух отсортированных диапазонов элементов в один отсортированный диапазон, используя алгоритм слияния "на месте".

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

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