算法

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

备注

算法模板函数的声明使用多个简短说明:

  • 声明 “在范围 [AB)开始 零意味着顺序或离散值等于但不包含 B。 ,仅当 B一个, 可访问的范围是有效的 ; 在对象 N 可以存储 (N = ),递增对象零次或多次 (++N) 并将对象与 B 相等 after (N == B 的受限的数字*。*

  • 声明 “中的每个 N [AB)”表示 N 从该值 启动并包括提高的零次或多次,直到它等于该值 B。 用例 N == B 不在范围。

  • 声明 “ N 的 最低值的范围中[A, *B)*这样的 X”意味着该条件 x 为该范围 [每个 N 是标识, B),直到该条件 x 匹配。

  • 声明 “ N 的 最大值在范围 [, *B)*这样的 X 表示 X 为在范围 [AB 的每个 N 确定。 ,每当该条件 x 匹配,函数在 K 存储 N 的 副本。 如果任何此类存储发生,该函数。 K的值替换 N 的最终值,等于 B,。 对于双向或随机访问迭代器,但是,可能还意味着 N 从某个范围的最大值开始和递减在范围,直到该条件 x 匹配。

  • 表达式 (如 X -Y,除了随机访问迭代器之外, XY 可以是迭代器,在数学有意义的意图。 ,则必须确定这样一个值,该函数不一定计算运算符- 。 同样也适用于表达式 (如 X + 和 N X -N,其中 N 是整数类型。

几种算法利用成对地执行一次比较,如使用 operator==,使 bool 结果的性质。 谓词函数 operator==,或它的任何替换,无法修改其操作数。 它必须为同一个 bool 因此,在它进行计算时,因此,它必须为同一个后果,如果其中一个操作数的副本将该操作数进行替换。

几种算法利用必须实施强弱顺序对序列中的元素的性质。 该谓词 pr(XY):

  • 强这意味着 pr(X, *X)*是错误的。

  • 弱意味着 XY 是否具有等效排序!pr(XY) !pr(Y,其中 X)(X == Y 不需要定义)。

  • 排序这意味着 pr(XY) pr(Y, Z) 提示 pr(X, Z)。

某些算法隐式使用谓词 x AMP_LT Y。 通常满足该强弱的排序需的其他谓词是 X AMP_GT Y小于(X、 *Y)*和 greater(XY)。 然而,请注意,谓词 (如 X AMP_LT= YX AMP_GT= Y 不能满足此要求。

在该范围 [First, Last) 的迭代器指定的元素序列是运算符命令的顺序AMP_LT ,则,在该范围 [0, Last的每个 N -First) 和在范围 (N, Last的每个 M 的 -First) 谓词! (* (First + *M)*AMP_LT * ( N)+) 为 true。 (请注意元素按升序排序。)谓词函数 operatorAMP_LT,或它的任何替换,无法修改其操作数。 它必须为同一个 bool 因此,在它进行计算时,因此,它必须为同一个后果,如果其中一个操作数的副本将该操作数进行替换。 此外,它必须对它进行比较的强弱顺序对操作数。

在该范围 [First, Last) 的迭代器指定的元素顺序是 operatorAMP_LT 命令的堆,则,在该范围 [1, Last的每个 N -First) 谓词! (*First AMP_LT * (First + *N)*为 true。 (第一个元素最大。)其内部结构仅否则了解对模板函数 make_heappop_heappush_heap。 使用已排序的序列,谓词函数 operatorAMP_LT,或它的任何替换,无法修改其操作数,因此,它必须对它进行比较的强弱顺序对操作数。 它必须为同一个 bool 因此,在它进行计算时,因此,它必须为同一个后果,如果其中一个操作数的副本将该操作数进行替换。

STL 算法位于 <algorithm><numeric> 头文件。

请参见

参考

标准模板库

线程安全性对标准C++库中