C++ geek
3.56K subscribers
251 photos
2 videos
16 links
Учим C/C++ на примерах
Download Telegram
Алгоритм 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
Алгоритм inner_product

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

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

Синтаксис:
std :: move (first, last, result);

Перемещает элементы диапазона [first,last) в диапазон, начиная с позиции result.

Значение элементов в [first,last) массиве передается элементам, на которые указывает result. После вызова элементы в диапазоне [first,last) остаются в неопределенном, но допустимом состоянии.

➡️ @cpp_geek
-->«оператор»

Вы можете использовать
-->«оператор» в цикле while в качестве оператора «Переход к».

Например, вы можете печатать числа 7 6 5 4 3 2 1 с помощью цикла while следующим образом.

Примечание:
--> на самом деле это не оператор, а комбинация двух операторов --и >. Вышеупомянутое while то же самое while( (x--) > 0 ), что читается как «уменьшить x на 1, а затем сравнить результат с 0».

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

Алгоритм replace_if() используется для присвоения нового значения всем элементам в диапазоне [first, last), для которых функция IsOdd возвращает true.

➡️ @cpp_geek
Функция isalpha()

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

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

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

➡️ @cpp_geek
Могут ли ссылки отсылать к недопустимому местоположению в памяти в C++?

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

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

next_permutation(first, last) - переставляет элементы так, чтобы получилась следующая в лексикографическом порядке перестановка. Можно применять не только к векторам, но и к строкам (как и многие другие алгоритмы).

Метод возвращает true, если удалось построить следующую в лексикографическом порядке перестановку. Если же первоначальная перестановка уже была максимальной в лексикографическом порядке, то метод генерирует минимальную в лексикографическом порядке перестановку и возвращает false.
Бесконечный цикл

Для чего? Когда while(true), while(1), for(;;) и прочие стандартные пути создания цикла кажутся не слишком информативными, можно использовать подобный макрос. Единственный плюс который он дает — чуть лучшую читаемость кода.

➡️ @cpp_geek
Метод map::emplace_hint

Аналогичен методу emplace(), но дополнительно позволяет подсказать позицию вставки с помощью итератора. Метод возвращает итератор на вставленный элемент или на существующий элемент (вставить элемент с одинаковым ключом нельзя).

➡️ @cpp_geek
Что лучше const или define?

Ответ:
define - это директива препроцессора, которая не учитывает ни типов, ни областей видимости. Препроцессор вставляет значение везде, где оно используется и создается множество копий 3.14159265359 в объектном коде, константа никогда не порождает больше одной копии этого значения. define трудно отлаживать, потому что у него нет имени, только магическое число, нельзя взять адрес или создать ссылку на это значение.

У const есть тип, область видимости, можно взять адрес, создать константную ссылку на эту переменную.

Определенно, лучше использовать const, а не define.

➡️ @cpp_geek
Шаблон Voodoo

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

Больше интересного по ссылке.

➡️ @cpp_geek