C++ geek
3.57K subscribers
251 photos
2 videos
16 links
Учим C/C++ на примерах
Download Telegram
Алгоритм set_intersection

Создает отсортированную последовательность из элементов, встречающихся в обеих последовательностях – [first1, last1) и [first2, last2).

➡️ @cpp_geek
Для чего нужен аллокатор и как создать свой собственный аллокатор?

Аллокатор это шаблонный класс, который отвечает за выделение памяти и создание объектов. По умолчанию все контейнера используют std::allocator<T>.
В языке c++ имеется так же возможность написать свой аллокатор. У своего алокатора должно быть такое объявление(см картинку).

➡️ @cpp_geek
Алгоритм copy_if

Копирует из диапазона элементов те элементы, проверка которых на соответствие заданному условию дает значение true.

➡️ @cpp_geek
Алгоритмы all_of, any_of и none_of

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

➡️ @cpp_geek
Алгоритм reverse_copy

Алгоритм копирует элементы из заданного диапазона, но в обратном порядке.

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

➡️ @cpp_geek
Функция isalpha() в С++ проверяет, является ли данный символ буквой или нет.

Синтаксис:
isalpha(int ch).

Возвращаемое значение:
Функция возвращает ненулевое значение, если ch – буква и ноль, если ch не буква.

➡️ @cpp_geek
Могут ли статические функции быть виртуальными в C++?

В C++ статическая функция-член класса не может быть виртуальной.

Кроме того, статические функции-члены класса не могут быть const и volatile.

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

➡️ @cpp_geek
Алгоритм swap_ranges

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

➡️ @cpp_geek
Объявление вложенных пространств имён

Избегайте вложенности пространств имён, а если не избежать, то объявляйте их так(см картинку).

Подробнее https://learn.microsoft.com/ru-ru/cpp/cpp/namespaces-cpp?view=msvc-160

➡️ @cpp_geek
Алгоритм is_partitioned

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

➡️ @cpp_geek
Алгоритм stable_partition

Упорядочивает последовательность, определенную параметрами start и end, так, чтобы все элементы, для которых предикат возвращал true, предшествовали тем, для которых предикат возвращает false. Разметка стабильная. Это означает, что относительный порядок последовательности сохраняется.

➡️ @cpp_geek
Алгоритм merge

Объединяет две отсортированные последовательности, ограниченные диапазонами [first1,last1) и [first2,last2), в единую отсортированную последовательность, начинающуюся с позиции result.

Шаблон:
merge (initer1 beg1, initer1 end1,
initer2 beg2, initer2 end2,
outiter res).


➡️ @cpp_geek
Некоторые различия между ссылками и указателями

1. Указатель может быть объявлен void, а ссылка - никогда. Пример на картинке.

2. Переменная-указатель может иметь несколько уровней вложенности, то есть, например, бывают одиночные указатели, двойные указатели, тройные указатели. Ссылка же имеет только один единственный уровень вложенности.

3. Ссылочная переменная не может быть обновлена.

➡️ @cpp_geek
Указатели с ключевыми словами const и volatile

Ключевые слова const и volatile изменяют то, как обрабатываются указатели. const указывает, что данные по указателю не могут быть изменены после инициализации; volatile указывает, что значение может быть изменено действиями, отличными от тех, которые указаны в пользовательском приложении.

volatile полезно для объявления объектов в общей памяти, к которым могут обращаться несколько процессов или для глобальных областей данных.

➡️ @cpp_geek
Алгоритм includes

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

➡️ @cpp_geek
Алгоритм clamp

Сравнивает значение с верхней и нижней границей и возвращает ссылку на значение, если оно находится между границами, или ссылку на верхнюю или нижнюю границу, если значение выше или ниже, соответственно.

➡️ @cpp_geek
Алгоритм iter_swap

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

Он просто меняет значения элементов, на которые указывают итераторы. Если мы посмотрим на его внутреннюю работу, мы обнаружим, что эта функция сама использует std::swap() .

➡️ @cpp_geek
Алгоритм nth_element

Перестраивает список таким образом, что элемент в n-й позиции — это тот элемент, который должен быть в этой позиции, если мы сортируем список.

➡️ @cpp_geek
Неиспользуемые переменные

Подобный макрос есть, например, в cocos2d-x, там он называется CC_UNUSED_PARAM. Из недостатков: теоретически, он может работать не на всех компиляторах. Тем не менее, в cocos2d-x он для всех платформ определен абсолютно одинаково.

Для чего? Этот макрос позволяет избежать предупреждения о неиспользуемой переменной, а читающему код он как бы говорит: «тот кто писал это — знал, что переменная не используется, все в порядке».

➡️ @cpp_geek
Преобразование типа с плавающей точкой в целочисленный

Язык C++ не предоставляет примитивную операцию округления чисел с плавающей точкой. Самым простым методом преобразования числа с плавающей точкой x в ближайшее целое число n будет оператор(см на картинке).

Используя такой метод, если x будет точно посередине между двумя целыми числами, то n будет округлено в большую сторону. Например, 0,5 -> 1; 1,5 -> 2; -0,5 -> 0; -1,5 -> -1.

➡️ @cpp_geek
Алгоритм upper_bound

Он возвращает итератор, указывающий на первый элемент в диапазоне [first, last), который больше значения, или last, если такой элемент не найден.

Элементы в диапазоне должны быть уже отсортированы или, по крайней мере, разделены по значению val.

➡️ @cpp_geek