Поделиться через


Aлгоритмы

Алгоритмы является основной частью стандартной библиотеки шаблонов.Алгоритмы не работают с контейнерами а сами с итераторами.Следовательно, один и тот же алгоритм может использоваться большинством если не все из контейнеров STL.Этот раздел описывает соглашения и терминам алгоритмов STL.

Заметки

Описание функций шаблонов алгоритма используется несколько фраз стенографии:

  • Фраза "в диапазоне [A" В)" - это последовательность из нуля или более значений дискретного типа начиная с A до но не включая В.Допустимо, только если диапазон В доступен из a; можно сохранить A в объекте N (N = A), увеличьте объект ноль или более раз (++N) и обладающее объект сравнения равно В после небесконечного количества инкрементов (B == n*).*

  • Каждая фраза " N в диапазоне [A" В" означает то) N начинается со значением A и увеличивает ноль или более раз, до тех пор, пока он не будет равняться значение В.Case N == В не в диапазон.

  • Фраза "наименьшее значение N в диапазоне [A" Вте, что) X"означает, что условие X определяются для каждого N в диапазоне [A" Взначение условия) X встречает.

  • Фраза "максимальное значение N в диапазоне [A" Вте, что) X означает то X определяются для каждого N в диапазоне [A" В).Функция хранит in K копия N каждый раз, когда условие X встречает.Если имеется хранилище, то функция заменяет конечное значение N, который соответствует Ви значение K.Для двухнаправленного или итератора произвольного доступа, однако это может также означать, то N не будут начиная с наиболее высоким значением в диапазоне и уменьшает с расстоянием до условия X встречает.

  • Выражения как X - y, где X и y могут быть итераторы за исключением произвольно-доступных итераторов, предназначены в математическую смысле.Функция не обязательно является оператор- в том случае, если она должна определить такое значение.Это также верно для выражений, как и X + N и X - N, где N тип integer.

Несколько алгоритмов использующих предикат, который выполняет сравнение, как и pairwise operator==, чтобы создать a bool результат.Функции предиката) **operator==**или любую замена для ее не должно изменяться также его операндов.Она должна создавать эти же bool результаты при каждом его вычисления, и она должна создавать один и тот же результат, если копия любого операнда заменена для операнда.

Несколько алгоритмов использующих предикат, который должен создать простой строгий порядок в паре элементов последовательности.Для предиката pr(X" y):

  • Означает то строго pr(X" X) false.

  • Слабо означает то X и y имеет эквивалентную приказывающ если!pr(X" y&&!)pr(y" X()X == y не должны быть определены).

  • Упорядочение означает то pr(X" y&&) pr(y, Z) подразумевает pr(X, Z).

Некоторые из этих алгоритмах неявно используется предикат X < y.Другие предикаты, которые удовлетворяют строгое слабое упорядочение требование, как правило X > y" (X" y) и greater(X" y).Обратите внимание, как эта предикаты X <= y и X >= y это требование не содержимого.

Последовательность элементов в диапазоне [обозначенных итераторамиFirst" Lastупорядоченная последовательность оператором)< если для каждого N в диапазоне [0, Last - Firstдля каждого) M в диапазоне (n) Last - Firstпредикат!)(* (First + M< (*)Первая + N)) - true.(Обратите внимание, что элементы сортируются в порядке возрастания.) Функции предиката) **operator<**или любую замена для ее не должно изменяться также его операндов.Она должна создавать эти же bool результаты при каждом его вычисления, и она должна создавать один и тот же результат, если копия любого операнда заменена для операнда.Кроме того, он должен установить строгий порядок операндов сравниваются на слабый.

Последовательность элементов в диапазоне [обозначенных итераторамиFirst" Lastкуча - это упорядоченная by) operator< если для каждого N в диапазоне [1, Last - Firstпредикат!)(*First * (<First + N)) - true.(Первый элемент наибольшие.) Свою внутреннюю структуру в противном случае известна только к функциям шаблона make_heap" pop_heapи push_heap.Как и в случае с упорядоченной последовательностью, функции предиката) **operator<**или любую замена для ее не должно изменяться также для своих операндов, и он должен установить строгий порядок операндов сравниваются на слабый.Она должна создавать эти же bool результаты при каждом его вычисления, и она должна создавать один и тот же результат, если копия любого операнда заменена для операнда.

Алгоритмы STL находятся в <algorithm> и <numeric> файлы заголовка.

См. также

Ссылки

Стандартная библиотека шаблонов

Потокобезопасность в стандартной библиотеке C++