<algorithm>

定义一个执行算法的标准模板库(STL)容器模板函数。

namespace std {
template<class InputIterator, class Predicate>
    bool all_of (
        InputIterator _First, 
        InputIterator _Last,
        Predicate _Pred
    );
template<class InputIterator, class Predicate>
    bool any_of (
        InputIterator _First, 
        InputIterator _Last,
        Predicate _Pred
    );
template<class InputIterator, class Predicate>
    bool none_of (
        InputIterator _First, 
        InputIterator _Last,
        Predicate _Pred
    );
template<class InputIterator, class Function>
    Fn1 for_each (
        InputIterator _First, 
        InputIterator _Last, 
        Function _Func
    );
template<class InputIterator, class Type>
    InputIterator find (
        InputIterator _First, 
        InputIterator _Last, 
        const Type& _Val
    );
template<class InputIterator, class Predicate>
    InputIterator find_if (
        InputIterator _First, 
        InputIterator _Last, 
        Predicate _Pred
    );
template<class InputIterator, class Predicate>
    InputIterator find_if_not (
        InputIterator _First, 
        InputIterator _Last,
        Predicate _Pred
    ); 
template<class ForwardIterator1, class ForwardIterator2>
    ForwardIterator1 find_end (
        ForwardIterator1 _First1, 
        ForwardIterator1 _Last1,
        ForwardIterator2 _First2, 
        ForwardIterator2 _Last2
    );
template<class ForwardIterator1, class ForwardIterator2, 
         class Predicate>
    ForwardIterator1 find_end (
        ForwardIterator1 _First1, 
        ForwardIterator1 _Last1,
        ForwardIterator2 _First2, 
        ForwardIterator2 _Last2, 
        Predicate _Pred
    );
template<class InputIterator, class ForwardIterator>
    InputIterator1 find_first_of (
        InputIterator _First1, 
        InputIterator _Last1,
        ForwardIterator _First2, 
        ForwardIterator _Last2
    );
template<class InputIterator, class ForwardIterator, 
         class Predicate>
    InputIterator1 find_first_of (
        InputIterator _First1, 
        InputIterator _Last1,
        ForwardIterator _First2, 
        ForwardIterator _Last2, 
        Predicate _Pred
    );
template<class ForwardIterator>
    ForwardIterator adjacent_find (
        ForwardIterator _First, 
        ForwardIterator _Last
    );
template<class ForwardIterator, class Predicate>
    ForwardIterator adjacent_find (
        ForwardIterator _First, 
        ForwardIterator _Last, 
        Predicate _Pred
    );
template<class InputIterator, class Type>
    typename iterator_traits<InputIterator>::difference_type
        count (
            InputIterator _First, 
            InputIterator _Last,
            const Type& _Val
        );
template<class InputIterator, class Predicate>
    typename iterator_traits<InputIterator>::difference_type
        count_if (
            InputIterator _First, 
            InputIterator _Last,
            Predicate _Pred
        );
template<class InputIterator1, class InputIterator2>
    pair<InputIterator1, InputIterator2> 
        mismatch (
            InputIterator1 _First1, 
            InputIterator1 _Last1,
            InputIterator2 _First2
        );
template<class InputIterator1, class InputIterator2, class Predicate>
    pair<InputIterator1, InputIterator2> 
        mismatch (
            InputIterator1 _First1, 
            InputIterator1 _Last1,
            InputIterator2 _First2, 
            Predicate _Pred
        );
template<class InputIterator1, class InputIterator2>
    bool equal (
        InputIterator1 _First1, 
        InputIterator1 _Last1, 
        InputIterator2 _First2
    );
template<class InputIterator1, class InputIterator2, class Predicate>
    bool equal (
        InputIterator1 _First1, 
        InputIterator1 _Last1, 
        InputIterator2 _First2, 
        Predicate _Pred
    );
template<class ForwardIterator1, class ForwardIterator2>
    ForwardIterator1 search (
        ForwardIterator1 _First1, 
        ForwardIterator1 _Last1,
        ForwardIterator2 _First2, 
        ForwardIterator2 _Last2
    );
template<class ForwardIterator1, class ForwardIterator2, 
         class Predicate>
    ForwardIterator1 search (
        ForwardIterator1 _First1, 
        ForwardIterator1 _Last1,
        ForwardIterator2 _First2, 
        ForwardIterator2 _Last2, 
        Predicate _Pred
    );
template<class ForwardIterator, class Size, class Type>
    ForwardIterator search_n (
        ForwardIterator _First, 
        ForwardIterator _Last,
        Size _Count, 
        const Type& _Val
    );
template<class ForwardIterator, class Size, class Type, 
         class Predicate>
    ForwardIterator search_n (
        ForwardIterator _First, 
        ForwardIterator _Last,
        Size _Count, 
        const Type& _Val, 
        Predicate _Pred
    );

备注

因为它们可对各种数据结构,STL算法为泛型。 它们可以操作的数据结构不仅包括STL容器选件类(如) vectorlist,还满足特定算法要求的程序定义的数据结构和某些元素。 STL算法通过间接访问和遍历容器的元素实现一般性的此级别通过迭代器。

STL算法处理它们的开始或结束位置通常指定的迭代器范围。 引用的范围必须是有效的来讲,在范围内的所有指针必须dereferenceable,因此,在每个范围内序列,最后位置必须是可访问的从开始按增量。

STL算法扩展每个STL容器的操作和成员函数支持的事件并允许,例如,与容器对象的不同类型的同时。 两后缀来传达有关算法的目的信息。

  • 如果该后缀,指示算法使用与运行元素中的值的函数对象而不是在元素的值。 find_if 算法查找值指示函数对象指定的该条件的元素,并且,find 算法搜索特定值。

  • _copy后缀指示算法不仅操作元素的值,还复制已修改的值到目标范围。 reverse 算法反转元素的顺序在范围内的,因此,reverse_copy 算法还复制该结果赋给目标范围。

STL算法通常按类别以指明XAML名称其用途或要求的组。 其中包括更改元素的值与nonmodifying的算法比较不中修改算法。 更改的算法更改元素顺序,但是,元素的不是值。 移除算法可以从范围的副本消除元素。 排序算法请重新排列在一个范围的元素各种方式,并排序的大小算法在元素排序以特定方式的算法仅操作。

为数字处理提供有自己的标头文件 <numeric>的数字STL算法和函数对象和适配器在返回一个值称为谓词的标头 <functional> 函数对象定义。 默认二进制谓词为比较 operator<。 通常,是的元素进行排序的需要比可比较,以便将任何两个元素,可以确定为它们是等效的(来讲都比其他不小于)或一个比其他小于。 这将导致排序在非等价的元素中。

yah1y2x8.collapse_all(zh-cn,VS.110).gif函数

adjacent_find

搜索等于或满足指定条件的两个相邻元素。

all_of

当条件为存在于给定范围时,的每个元素返回 true。

any_of

当条件至少一个位于元素时,的指定范围返回 true。

binary_search

测试是否在与指定的值相等或与其实际上是等效的二进制谓词指定的排序的范围的元素。

copy

和的源范围为目标范围,循环元素源序列并将它们分配向前的方向在元素的值的新位置。

copy_backward

和的源范围为目标范围,循环元素源序列并将它们分配在一个反向推理的元素的值的新位置。

copy_if

复制测试一个指定条件的 true 在给定范围内的所有元素

copy_n

复制指定数量的元素。

count

返回元素数。值与指定值的大小。

count_if

返回元素数。值与指定的条件的大小。

等于

由元素实际上比较两个范围元素二进制谓词或等效的指定的相等。

equal_range

查找位置对有序的大小,第一个大于或等效于位置一个指定的元素和第二个大于元素的位置,用于意义相同或有序建立在序列的位置可能由二进制谓词指定。

fill

进行相同的新值。在指定范围的每个元素。

fill_n

赋新值设置为指定数目的元素开始从特定元素的大小。

find

找到元素的第一次出现的位置具有指定值的大小。

find_end

在范围内查找二进制谓词实际上是等效的指定与指定的顺序相同的或的最后一subsequence。

find_first_of

搜索的第一个匹配项任何在目标范围内的若干值或的第一个匹配项二进制谓词实际上是等效的指定与指定将元素任意多个元素。

find_if

找到元素的第一次出现的位置满足指定条件的大小。

find_if_not

返回在不满足条件的范围的第一个元素。

for_each

应用于每个元素的指定函数对象按范围内的前向序列和函数返回对象。

生成

分配给每个元素的函数对象生成的值在范围内。

generate_n

给赋值指定数量的元素的函数对象生成的值属于范围并返回过最后分配的值的位置一。

包含

测试已排序的范围是否包含在秒排序的范围包含的所有元素,该元素之间的排序或等效性标准可以由二进制谓词指定。

inplace_merge

将两个连续的排序范围的元素到单个排序的大小,该排序的标准可以由二进制谓词指定。

is_heap

如果在指定范围的元素窗体堆,返回 true。

is_heap_until

如果指定窗体的大小直到最后一个元素,托管堆返回 true。

is_partitioned

返回 true,如果测试条件的 true 在给定范围内所有元素在测试 false的所有元素之前。

is_sorted

如果在指定范围的元素按排序顺序,返回 true。

is_sorted_until

如果在指定范围的元素按排序顺序,返回 true。

iter_swap

替换两个值所指定的迭代器对引用。

lexicographical_compare

由两个序列之间的元素比较元素确定是较小者两个。

lower_bound

查找第一个元素的位置在具有值大于或等效于指定值,该排序的标准可以由二进制谓词指定的有序的大小。

make_checked_array_iterator

创建可由其他算法使用的 checked_array_iterator

make_heap

将一个指定大小的元素为第一个元素最大,因此的堆哪些的排序的标准可以指定是二进制性质。

max

比较两个对象并返回两个大,其中是保留的标准可以由二进制谓词指定。

max_element

查找最大的组件第一次出现在该排序的标准可以由二进制谓词指定的指定的大小。

merge

将两个排序的源范围的所有元素为一个,排序的目标范围,该排序的标准可以由二进制谓词指定。

min

比较两个对象并返回较小者两个,其中是保留的标准可以由二进制谓词指定。

min_element

查找最小元素第一次出现在该排序的标准可以由二进制谓词指定的指定的大小。

minmax

比较两个输入参数并返回其用作对,按照最少的顺序到最大。

minmax_element

执行 min_element 执行的工作,并在一个中 max_element 调用。

不匹配

由元素实际上比较两个范围元素二进制谓词或等效指定的相等并找到差异发生的第一个位置。

<alg> move

将元素与一个指定的范围。

move_backward

移动一个迭代的元素向另一个。 在移动从在指定的范围的最后一个与第一个元素的元素和主端开始在该范围内。

next_permutation

重新排列在范围内的元素,以便原始顺序进行了字典地下更大的范围替换,如果存在,其中明年 五月意义指定是二进制性质。

none_of

当条件在给定范围时,的元素中不存在返回 true。

nth_element

遵循在序列的分区元素的大小,正确设置序列的 第n个元素该范围,以便在它前面的所有元素小于或等于它和所有元素都大于或等于它。

partial_sort

具有较小的指定数量的元素范围中到一个nondescending的顺序或基于二进制谓词指定的一个排序的条件。

partial_sort_copy

将源范围的元素添加到源元素由小于或另一指定的二进制谓词排序的目标范围。

Partition — 分区

类别中的元素到两个连续设置,当这些元素满足前面不能满足该的那些的一元的性质。

partition_copy

复制情况是 true 到一个目标的元素,并且,哪些的条件为 false 到另一个。 元素必须来自一个指定的范围。

partition_point

返回在不再满足条件的给定范围内的第一个元素。 元素排序,以便满足条件的那些在不的那些之前。

pop_heap

从堆的前面移除最大的元素下-在范围中倒数第一个位置然后从窗体其余元素的新的堆。

prev_permutation

重新排列在范围内的元素,以便原始顺序进行了字典地下更大的范围替换,如果存在,其中明年 五月意义指定是二进制性质。

push_heap

添加范围内结束时将包括在范围的现有堆的元素的元素。

random_shuffle

重新排列 N 个元素序列中的到一个 N! 随机选定的范围。

remove

从特定范围消除指定值,而不会影响清除其余元素的顺序与返回一个新范围的末尾指定值。

remove_copy

将源范围的元素为目标范围,除此之外,指定值的元素不复制,不会影响其余元素的顺序与返回一个新的目标范围的末尾。

remove_copy_if

将源范围的元素为目标范围,除此之外,满足谓词不会复制,不会影响其余元素的顺序与返回一个新的目标范围的末尾。

remove_if

消除满足给定范围的特性,而不会影响没有剩余的元素顺序与返回一个新范围的末尾指定值的元素。

replace

如果它与指定值,检查中的每个元素并替换它。

replace_copy

检查在源范围的每个元素并替换,则其与指定值,在复制结果到新的目标范围。

replace_copy_if

检查在源范围的每个元素并替换,则只要满足指定的特性,在复制结果到新的目标范围。

replace_if

则只要满足指定的特性,检查中的每个元素并替换它。

反转

反转元素的顺序在范围内。

reverse_copy

反转元素的顺序在源范围内,则将它们复制到目标范围时

旋转

交换在两个相邻范围的元素。

rotate_copy

交换在两个相邻范围的元素位于源范围内并复制该结果为目标范围。

搜索

搜索一个序列中的第一次出现在二进制谓词实际上是等效的指定元素与相等在元素的特定顺序或组件与组件在给定序列的目标范围内。

search_n

搜索在指定数量的元素具有特定的值或关系对该指定的值由二进制谓词的第一subsequence。

set_difference

sure属于一个排序的源范围的所有元素,但是,不为一秒排序源范围,为单个,排序的目标范围,该排序的标准可以由二进制谓词指定。

set_intersection

sure属于两个排序的源范围为单个的所有元素,排序的目标范围,该排序的标准可以由二进制谓词指定。

set_symmetric_difference

sure属于一个的所有元素,但是,不是两个,排序的源范围为单个中,排序目标范围,该排序的标准可以由二进制谓词指定。

set_union

sure属于两个排序的源范围中至少有一个到单个的所有元素,排序的目标范围,该排序的标准可以由二进制谓词指定。

sort

在一个指定大小的元素到一个nondescending的顺序或基于二进制谓词指定的一个排序的条件。

sort_heap

转换堆转换为排序的大小。

stable_partition

类别中的元素到两个连续设置,当这些元素满足前面不能满足该的那些的一元的特性,保留等效的元素相对顺序。

stable_sort

在一个指定大小的元素到一个nondescending的顺序或基于二进制谓词指定的一个排序的标准并保留相对顺序等效的元素。

交换

交换元素的值对象之间的两种类型的分配,第一个对象到第二个对象的内容和目录第二个到第一个。

swap_ranges

交换一个范围的元素与另一个组件,它们大小的范围。

Transform — 转换

两个源范围应用指定的函数对象到位于源范围的每个元素或对一对元素并复制函数对象的返回值赋给目标范围。

unique

移除重复是在手指围绕在指定范围的元素。

unique_copy

将源范围的元素为目标范围只不过是在手指围绕的重复元素。

upper_bound

查找第一个元素的位置中有一个值大于指定值大,该排序的标准可以由二进制谓词指定的有序的大小。

请参见

参考

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

标准模板库

其他资源

标头文件