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


Алгоритмы

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

Заметки

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

  • Фраза «в диапазоне [A, B)» означает последовательность ноль или более дискретных значений начиная с A до B. Диапазон допустим только в том случае, если B доступен из A, можно хранить A в объекте N (N = A) следует увеличить объект ноль или более раз (++N) и получить объект сравнения равно B после небесконечного количеста инеремента (N == B*).*

  • Фраза «каждое N в диапазоне [a, B)» означает, что N начинается со значением a и инкрементированные ноль или более раз до тех пор, пока не будет равна значение B. Случая N == B нет в диапазоне.

  • Фраза «наименьшее значение N в диапазоне [a, B) таким образом, чтобы X» означает, что условие X определяется для каждого N в диапазоне [a, B) до тех пор, пока не будет X условие выполняется.

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

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

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

Несколько алгоритмов используется предикат, должен создать строгого слабое упорядочение пар элементов последовательности. Для предиката pr(X, Y).

  • Строгий означает, что pr(X, X) ложен.

  • "Слабый" означает, что X и Y имеют одинаковую сортировку если !pr(X, Y) && !pr(Y, X) (X == Y не требуется указывать).

  • Упорядочение означает, что этот pr(X, Y) &&pr(Y, Z) означает pr(X, Z).

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

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

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

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

См. также

Ссылки

Библиотека стандартных шаблонов

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