Объявление вложенных пространств имён
Избегайте вложенности пространств имён, а если не избежать, то объявляйте их так(см картинку).
Подробнее https://learn.microsoft.com/ru-ru/cpp/cpp/namespaces-cpp?view=msvc-160
➡️ @cpp_geek
Избегайте вложенности пространств имён, а если не избежать, то объявляйте их так(см картинку).
Подробнее https://learn.microsoft.com/ru-ru/cpp/cpp/namespaces-cpp?view=msvc-160
➡️ @cpp_geek
Алгоритм is_partitioned
Используется для определения того, разделен ли диапазон [first, last) или нет. Говорят, что диапазон разделен относительно условия, если все элементы, для которых условие оценивается как истинное, предшествуют тем, для которых оно является ложным.
➡️ @cpp_geek
Используется для определения того, разделен ли диапазон [first, last) или нет. Говорят, что диапазон разделен относительно условия, если все элементы, для которых условие оценивается как истинное, предшествуют тем, для которых оно является ложным.
➡️ @cpp_geek
Алгоритм stable_partition
Упорядочивает последовательность, определенную параметрами
➡️ @cpp_geek
Упорядочивает последовательность, определенную параметрами
start
и end
, так, чтобы все элементы, для которых предикат возвращал true
, предшествовали тем, для которых предикат возвращает false
. Разметка стабильная. Это означает, что относительный порядок последовательности сохраняется.➡️ @cpp_geek
Алгоритм merge
Объединяет две отсортированные последовательности, ограниченные диапазонами
Шаблон:
➡️ @cpp_geek
Объединяет две отсортированные последовательности, ограниченные диапазонами
[first1,last1)
и [first2,last2)
, в единую отсортированную последовательность, начинающуюся с позиции result.Шаблон:
merge (initer1 beg1, initer1 end1,
initer2 beg2, initer2 end2,
outiter res).
➡️ @cpp_geek
Некоторые различия между ссылками и указателями
1. Указатель может быть объявлен
2. Переменная-указатель может иметь несколько уровней вложенности, то есть, например, бывают одиночные указатели, двойные указатели, тройные указатели. Ссылка же имеет только один единственный уровень вложенности.
3. Ссылочная переменная не может быть обновлена.
➡️ @cpp_geek
1. Указатель может быть объявлен
void
, а ссылка - никогда. Пример на картинке.2. Переменная-указатель может иметь несколько уровней вложенности, то есть, например, бывают одиночные указатели, двойные указатели, тройные указатели. Ссылка же имеет только один единственный уровень вложенности.
3. Ссылочная переменная не может быть обновлена.
➡️ @cpp_geek
Указатели с ключевыми словами const и volatile
Ключевые слова const и volatile изменяют то, как обрабатываются указатели. const указывает, что данные по указателю не могут быть изменены после инициализации; volatile указывает, что значение может быть изменено действиями, отличными от тех, которые указаны в пользовательском приложении.
volatile полезно для объявления объектов в общей памяти, к которым могут обращаться несколько процессов или для глобальных областей данных.
➡️ @cpp_geek
Ключевые слова const и volatile изменяют то, как обрабатываются указатели. const указывает, что данные по указателю не могут быть изменены после инициализации; volatile указывает, что значение может быть изменено действиями, отличными от тех, которые указаны в пользовательском приложении.
volatile полезно для объявления объектов в общей памяти, к которым могут обращаться несколько процессов или для глобальных областей данных.
➡️ @cpp_geek
Алгоритм includes
Используется для распознавания, существуют ли все числа тз одного контейнера в других контейнерах. Это помогает проверить, является ли набор подмножеством другого набора или нет, учитывая, что набор упорядочен. Ожидается, что элементы будут отсортированы по порядку.
➡️ @cpp_geek
Используется для распознавания, существуют ли все числа тз одного контейнера в других контейнерах. Это помогает проверить, является ли набор подмножеством другого набора или нет, учитывая, что набор упорядочен. Ожидается, что элементы будут отсортированы по порядку.
➡️ @cpp_geek
Алгоритм iter_swap
std::swap используется для обмена элементами между двумя контейнерами. Один из других способов сделать то же самое облегчает std::iter_swap, который, как следует из названия, используется для замены элементов с помощью итератора.
Он просто меняет значения элементов, на которые указывают итераторы. Если мы посмотрим на его внутреннюю работу, мы обнаружим, что эта функция сама использует std::swap() .
➡️ @cpp_geek
std::swap используется для обмена элементами между двумя контейнерами. Один из других способов сделать то же самое облегчает std::iter_swap, который, как следует из названия, используется для замены элементов с помощью итератора.
Он просто меняет значения элементов, на которые указывают итераторы. Если мы посмотрим на его внутреннюю работу, мы обнаружим, что эта функция сама использует std::swap() .
➡️ @cpp_geek
Неиспользуемые переменные
Подобный макрос есть, например, в cocos2d-x, там он называется CC_UNUSED_PARAM. Из недостатков: теоретически, он может работать не на всех компиляторах. Тем не менее, в cocos2d-x он для всех платформ определен абсолютно одинаково.
Для чего? Этот макрос позволяет избежать предупреждения о неиспользуемой переменной, а читающему код он как бы говорит: «тот кто писал это — знал, что переменная не используется, все в порядке».
➡️ @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
Язык C++ не предоставляет примитивную операцию округления чисел с плавающей точкой. Самым простым методом преобразования числа с плавающей точкой x в ближайшее целое число n будет оператор(см на картинке).
Используя такой метод, если x будет точно посередине между двумя целыми числами, то n будет округлено в большую сторону. Например, 0,5 -> 1; 1,5 -> 2; -0,5 -> 0; -1,5 -> -1.
➡️ @cpp_geek
Алгоритм move
Синтаксис:
std :: move (first, last, result);
Перемещает элементы диапазона [first,last) в диапазон, начиная с позиции result.
Значение элементов в [first,last) массиве передается элементам, на которые указывает result. После вызова элементы в диапазоне [first,last) остаются в неопределенном, но допустимом состоянии.
➡️ @cpp_geek
Синтаксис:
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
Вы можете использовать
-->«оператор» в цикле while в качестве оператора «Переход к».
Например, вы можете печатать числа 7 6 5 4 3 2 1 с помощью цикла while следующим образом.
Примечание:
--> на самом деле это не оператор, а комбинация двух операторов --и >. Вышеупомянутое while то же самое while( (x--) > 0 ), что читается как «уменьшить x на 1, а затем сравнить результат с 0».
➡️ @cpp_geek
Могут ли ссылки отсылать к недопустимому местоположению в памяти в C++?
В C++ ссылки более безопасны, чем указатели, потому что ссылки должны быть инициализированы, и их нельзя изменить, чтобы ссылаться на что-то другое после инициализации. Но есть исключения, когда у нас могут быть недействительные ссылки, они приведены на картинке.
➡️ @cpp_geek
В C++ ссылки более безопасны, чем указатели, потому что ссылки должны быть инициализированы, и их нельзя изменить, чтобы ссылаться на что-то другое после инициализации. Но есть исключения, когда у нас могут быть недействительные ссылки, они приведены на картинке.
➡️ @cpp_geek
Алгоритм next_permutation
next_permutation(first, last) - переставляет элементы так, чтобы получилась следующая в лексикографическом порядке перестановка. Можно применять не только к векторам, но и к строкам (как и многие другие алгоритмы).
Метод возвращает true, если удалось построить следующую в лексикографическом порядке перестановку. Если же первоначальная перестановка уже была максимальной в лексикографическом порядке, то метод генерирует минимальную в лексикографическом порядке перестановку и возвращает false.
next_permutation(first, last) - переставляет элементы так, чтобы получилась следующая в лексикографическом порядке перестановка. Можно применять не только к векторам, но и к строкам (как и многие другие алгоритмы).
Метод возвращает true, если удалось построить следующую в лексикографическом порядке перестановку. Если же первоначальная перестановка уже была максимальной в лексикографическом порядке, то метод генерирует минимальную в лексикографическом порядке перестановку и возвращает false.