算法

算法由标准模板库的基本部分。 算法不使用容器,而是与迭代器一起使用。 因此,同一算法可以由大多数使用,则并非所有 STL 容器。 本节讨论 STL 算法的约定和术语。

备注

算法模板函数的阐释多种简短说明:

  • 词组“处于范围 [AB)" 意指序列或从零 A 离散值但不包含 B。 从 B 才可访问的范围是有效的 A; 可以存储在 A 对象 N (N = A),增大对象 (++N) 零次或多次 ++N () 并将对象在增量后比较与 B 的一个限制的数目 (N == B*)。*

  • 词组“范围中的每一 " [AB)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,而不是随机访问迭代器之外,XY 可以是迭代器,在数学中有意义。 如果它必须将此类值,函数不绑定计算- 运算符。 同样也适用于表达式 ( X + 和 X N - N,其中 N 是整数类型。

几种算法使用成对地执行一个比较,如 operator==,则结果 bool 的谓词。 谓词函数 operator==,或它的任何替换,不能修改其操作数。 它必须为同一类型 bool 结果,则计算时,并且必须为同一类型结果,如果任一操作数用复制操作数进行替换。

几种算法必须使用对强弱顺序对从序列元素的谓词。 对于 pr谓词 (xy):

  • 强烈意味着该 pr(x,*x)*是 false。

  • 弱意味着 XY 具有等效,则排序 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(xy)。 然而,请注意,该谓词 X < = YX > = 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> 头文件中。

请参见

参考

标准模板库

C++ 标准库中的线程安全