Algorithm算法库(表格形式)

Algorithm算法库

algorithm算法可以通过迭代器或指针访问的任何对象序列,例如数组或某些STL容器的实例。但请注意,算法直接通过迭代器对值进行操作,不会以任何方式影响容器的结构(它永远不会影响容器的大小或存储分配)。

不修改序列的方法

bool all_of (first, last, pred)

对范围 [first1,last1)内的所有测试pred函数,如果有一个pred返回false则中断并返回false

bool any_of (first, last, pred)

对范围 [first1,last1)内的所有测试pred函数,如果有一个pred返回true则中断并返回true

bool none_of (first, last, pred)

和all_of函数作用相反

Function for_each(first, last, fn)

对范围 [first1,last1)内的所有应用fn函数,返回fn(fn的右值引用)

InputIterator find (first, last, val)

在范围 [first1,last1)内中寻找val,返回找到的第一个指针(迭代器)

InputIterator find_if (first, last, pred)

在范围 [first1,last1)内中寻找第一个符合测试函数pred的元素

InputIterator find_if_not (first, last, pred)

与find_if相反

Iterator find_first_of (first1, last1,first2,last2)

在first1到last1中寻找第一个first2到last2(最后子序列),可以在最后传入自定义函数

Iterator find_end (first1, last1,first2,last2)

在first1到last1中寻找最后一个first2到last2(最后子序列),可以在最后传入自定义函数

Iterator adjacent_find (first, last)

在范围内中寻找第一个两个元素连续的情况,返回指针

Int count (first, last, val);

在范围内统计val出现的次数并返回

Int count_if (first, last, pred);

在范围内统计符合判定函数pred的元素个数并返回

pair<InputIterator1, InputIterator2>

    mismatch (first1, last1, first2 )

寻找first1到last1序列和以first2开始的序列第一个不同的元素,返回不同时的两个指针的pair

bool equal (first1, last1,first2);

判断first1到last1序列和以first2开始的序列是否相同,可以在最后传入自定义函数

bool is_permutation (first1, last1,first2);

判断first1到last1序列和以first2开始的序列是否互为排列,可以在最后传入自定义函数,只要元素相同就可以,即使顺序不同

ForwardIterator1 search (first1, last1,

first2, last2);

在 [first1,last1)中寻找第一个 [first2,last2), 并返回匹配的元素开头,可以在最后传入自定义函数

ForwardIterator search_n (first, last,

count, val);

在 [first1,last1)中寻找第一个连续的count个val,并返回匹配的元素开头,可以在最后传入自定义函数

修改序列的方法

Iterator copy (first, last, Iterator result)

将 [first,last) 复制到以 result开头的相同范围中,目标范围中的迭代器,指向最后移动的元素。

Iterator copy_n (first, n, Iterator result)

将first开头的n个元素复制到result开头的n个元素中

OutputIterator copy_if (first, last,result, pred);

将范围中的符合pred的元素复制到result中

Iterator copy_backward (first,last,result);

将范围内的元素复制带以result结束的范围中

Iterator move (first, last, result);

移动范围 [first, last) 中的元素到始于 result的另一范围

Iterator move_backward(first, last, result);

移动来自范围 [first, last) 的元素到终于 d_last 的另一范围

void fill(first, last, value );

赋值value 给 [first, last) 中的元素。

void fill_n(first, count, value );

赋值value 给 first开头的count个元素。

一、Iterator transform(first1, last1, d_first, unary_op );

二、Iterator transform(first1, last1, first2, d_first, binary_op );

一、应用一元函数 unary_op 到 [first1, last1) 所定义的范围。

二、应用二元函数 binary_op 到来自二个范围的元素对:一个以 [first1, last1) 定义,而另一个始于 first2 。

void generate(first, last, Generator g );

多次调用函数g(),填充范围 [first, last)

void generate_n(first, count, Generator g );

多次调用函数g(),填充范围 [first, first+count)

ForwardIt remove(first, last, value );
ForwardIt remove_if(first, last, p );

移除 [first, last) 中的全部value

移除满足特定标准的元素 ,如果p(元素)==true则移除此元素

Iterator remove_copy(first, last, d_first, value );
remove_copy_if

复制一个范围内不满足特定条件的元素 

void replace(first, last,old_value, new_value );
replace_if

将所有满足特定条件的元素替换为另一个值 

OutputIt replace_copy(first, last,

d_first,  old_value, new_value );

replace_copy_if

复制一个范围内的元素,并将满足特定条件的元素替换为另一个值 

void swap( T& a, T& b );

交换两个对象的值 ,例如数组或容器

ForwardIt2 swap_ranges(first1, last1, first2 );

交换两个范围的元素 

void iter_swap( ForwardIt1 a, ForwardIt2 b );

交换两个迭代器所指向的元素 

void reverse( BidirIt first, BidirIt last );

将区间内的元素颠倒顺序 

OutputIt reverse_copy(first, last, d_first );

将区间内的元素颠倒顺序并复制 到d_first开始的区域中

ForwardIt rotate(first, n_first, last );

// 简单地旋转到左侧

    std::rotate(v.begin(), v.begin() + 1, v.end());

// 简单地旋转到右侧

    std::rotate(v.rbegin(), v.rbegin() + 1, v.rend());

将区间内的元素旋转 

OutputIt rotate_copy(first, n_first, last, d_first );

将区间内的元素旋转并复制 到d_first开始的区域中

void random_shuffle(first, last );

将范围内的元素随机重新排序 

ForwardIt unique(first, last );

删除区间内连续重复的元素 

OutputIt unique_copy(first, last, d_first );

删除区间内连续重复的元素并复制 

划分操作

bool is_partitioned(first, last, p );

若在范围中的所有满足p的元素都出现在所有不满足的元素前则返回 true

bool partition(first, last, p );

重排序范围 [first, last) 中的元素,使得谓词 p 对其返回 true 的元素前于谓词 p 对其返回 false 的元素。

std::pair<OutputIt1, OutputIt2>

partition_copy( InputIt first, InputIt last,

OutputIt1 d_first_true, OutputIt2 d_first_false,

UnaryPredicate p );

将范围 [first, last)中的元素通过谓词p判断,满足的放到d_first_true,不满足的放到d_first_false,最后返回指向两个输出序列的末尾的指针

BidirIt stable_partition(first, last, p );

重排序范围 [first, last) 中的元素,使得所有谓词 p 对其返回 true 的元素先于谓词 p 对其返回 false 的元素

ForwardIt partition_point(first, last, p );

返回范围[first, last) 内第一划分结尾后的迭代器,或若所有元素满足 p 则为 last 。

排序操作

void sort(first, last );

void sort(first, last, comp );

以升序排序范围 [first, last) 中的元素。不保证维持相等元素的顺序。可以提供比较函数

void stable_sort(first, last );

稳定排序,以升序排序范围 [first, last) 中的元素。保证保持等价元素的顺序。

void nth_element(first, nth, last );

它重排 [first, last) 中元素,使得:

nth 所指向的元素被更改为假如 [first, last) 已排序则该位置会出现的元素。

这个新的 nth 元素前的所有元素小于或等于新的 nth 元素后的所有元素。

void partial_sort(first, middle, last );

重排元素,使得范围 [first, middle) 含有范围 [first, last) 中已排序的 middle - first 个最小元素。

不保证保持相等的元素顺序。范围 [middle, last) 中剩余的元素顺序未指定。

RandomIt partial_sort_copy(first, last,

 d_first, d_last );

以升序排序范围 [first, last) 中的某些元素,存储结果于范围 [d_first, d_last) 。

至多将 d_last - d_first 个元素放置并排序到范围 [d_first, d_first + n) 中。其中 n 是要排序的元素数( n = min(last - first, d_last - d_first) )。不保证保持相等元素的顺序。

bool is_sorted(first, last );

检查 [first, last) 中的元素是否以升序排序。

ForwardIt is_sorted_until(first, last );

寻找始于 first 且其中元素已以升序排序的最大范围,返回第一个不再上升的元素指针

二分搜索操作(在已排序范围上)

ForwardIt lower_bound(first, last, value );

返回指向范围 [first, last) 中首个不小于value 的元素的指针,若找不到这种元素则返回 last 。

ForwardIt upper_bound(first, last, value );

返回指向范围 [first, last) 中首个大于value 的元素的指针,若找不到这种元素则返回 last 。

bool binary_search(first, last, value );

返回在范围 [first, last)中是否有值value

std::pair<ForwardIt,ForwardIt>

equal_range(first, last,value );

返回范围内等于value的元素范围,可以给定比较函数

return make_pair(

lower_bound(first, last, value),upper_bound(first, last, value));

集合操作(在已排序范围上)

OutputIt merge(first1, last1,first2, last2,

OutputIt d_first );

合并两个已排序的区间 到d_first中,返回合并后的最后一个元素指针

void inplace_merge(first, middle, last );

就地合并两个有序的区间 ,middle是第一序列的结束也是第二序列的开头,也就是两个序列要连续

bool includes(first1, last1,first2, last2 );

如果一个集合是另外一个集合的子集则返回true 

OutputIt set_difference(first1, last1,first2, last2,

OutputIt d_first );

计算两个集合的差集 ,放到d_first中,可以给定比较函数

OutputIt set_intersection(first1, last1, first2, last2,OutputIt d_first );

计算两个集合的交集  ,放到d_first中,可以给定比较函数

OutputIt set_symmetric_difference(first1, last1,

first2, last2,OutputIt d_first );

计算两个集合的对称差 ,复制两个集合各自的非交集部分,到d_first

OutputIt set_union( first1, last1,first2, last2,

                 OutputIt d_first );

计算两个集合的并集 ,放到d_first中

堆操作

bool is_heap( RandomIt first, RandomIt last );

检查给定的区间是否为一个堆 ,可加入比较函数

RandomIt is_heap_until(first, last );

返回始于 first 且为最大堆的最大范围界

void make_heap(first, last );

根据区间内的元素创建出一个堆 

void push_heap(first, last );

将元素加入到堆 

void pop_heap(first, last );

将堆中的最大元素删除,不返回

void sort_heap(first, last );

将堆变成一个排好序的区间 

最小/最大操作

const T& max( const T& a, const T& b );

T max( std::initializer_list<T> ilist );

返回两个元素中的较大值 ,或是序列中的最大值

ForwardIt max_element(first, last );

返回区间内的最大元指针

min

返回两个元素中的较小值 ,或是序列中的最小值

min_element

返回区间内的最小元素 

std::pair<const T&,const T&> minmax(

const T& a, const T& b );

std::pair<T,T> minmax(

std::initializer_list<T> ilist);

返回两个元素中的较大者和较小者组成的pair

minmax_element

返回区间内的最小元素和最大元素 

bool lexicographical_compare(

InputIt1 first1, InputIt1 last1,

InputIt2 first2, InputIt2 last2 );

如果按字典顺序一个区间小于另一个区间,返回true ,可以传入比较函数

bool is_permutation(first1, last1, first2, last2 );

若存在范围 [first1, last1) 中元素的排列,使得该范围等于 [first2,last2) ,则返回 true

bool next_permutation( BidirIt first, BidirIt last );

按字典顺序产生区间内元素下一个较大的排列组合 

bool prev_permutation( BidirIt first, BidirIt last);

按字典顺序产生区间内元素下一个较小的排列组合 

参考:

https://zh.cppreference.com/w/cpp/container

http://www.cplusplus.com/reference/algorithm/

本文的word版本已放出,方便打印

https://download.csdn.net/download/zoollcar/10903653

猜你喜欢

转载自blog.csdn.net/zoollcar/article/details/86072491
今日推荐