算法
算法由标准模板库的基本部分。 算法不使用容器,而是与迭代器一起使用。 因此,同一算法可以由大多数使用,则并非所有 STL 容器。 本节讨论 STL 算法的约定和术语。
备注
算法模板函数的阐释多种简短说明:
词组“处于范围 [A,B)" 意指序列或从零 A 离散值但不包含 B。 从 B 才可访问的范围是有效的 A; 可以存储在 A 对象 N (N = A),增大对象 (++N) 零次或多次 ++N () 并将对象在增量后比较与 B 的一个限制的数目 (N == B*)。*
词组“范围中的每一 " [A,B)”N 表示值 。 从开始并且每次递增零次或多次,直到值等于 B。 情况 " == B 不在范围。
词组“最低的值处于范围 N in the range [A, B) such that X" 意味着条件 X 是确定的 N 为范围 [A, B) 直到条件 X 满足。
词组“最高值处于范围 N 为范围 [A, B) 这样 X 表示 X 是确定的 N 为范围 [A, B)。 在条件匹配函数在 N x,K 存储副本。 如果任何方式存储发生,函数为 K的值替换最终值 N,等号,B。 对于双向或随机访问迭代器,不过,可能还意味着 或者 以在范围的上、下限开始和递减范围内,直到条件 x 匹配。
表达式 ( X -Y,而不是随机访问迭代器之外,X 和 Y 可以是迭代器,在数学中有意义。 如果它必须将此类值,函数不绑定计算- 运算符。 同样也适用于表达式 ( X + 和 X N - N,其中 N 是整数类型。
几种算法使用成对地执行一个比较,如 operator==,则结果 bool 的谓词。 谓词函数 operator==,或它的任何替换,不能修改其操作数。 它必须为同一类型 bool 结果,则计算时,并且必须为同一类型结果,如果任一操作数用复制操作数进行替换。
几种算法必须使用对强弱顺序对从序列元素的谓词。 对于 pr谓词 (x,y):
强烈意味着该 pr(x,*x)*是 false。
弱意味着 X 和 Y 具有等效,则排序 if !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) 和范围 (在 N,Last的每 M 的 -First谓词!)(* (First Shift+M ) <* (第 N)+) 为 true。(请注意元素按升序排序。)谓词函数 运算符<,或者它的任何替换,不能修改其操作数。 它必须为同一类型 bool 结果,则计算时,并且必须为同一类型结果,如果任一操作数用复制操作数进行替换。 此外,它必须对它比较的强弱顺序操作数。
处于范围 [First,Last) 的迭代器指定的元素序列为 运算符< 排序堆,如果,处于范围 [1,Last的每个 的 N -First谓词!)(*First < * (First + *N)*为 true。(第一个元素最大。)其内部结构仅否则了解对模板函数 make_heappop_heappush_heap、和。 使用已排序序列,谓词函数 运算符<,或者它的任何替换,不能修改其操作数,交互,并且必须对它比较的强弱顺序操作数。 它必须为同一类型 bool 结果,则计算时,并且必须为同一类型结果,如果任一操作数用复制操作数进行替换。
算法在 STL 和 <algorithm><numeric> 头文件中。