Algorithm算法库的函数介绍word格式表格,方便打印
algorithm函数可以通过迭代器或指针访问的任何对象序列,例如数组或某些STL容器的实例。但请注意,算法直接通过迭代器对值进行操作,不会以任何方式影响容器的结构(它永远不会影响容器的大小或存储分配)。
### C++标准库Algorithm知识点详解
#### 概述
C++标准库中的`<algorithm>`头文件提供了大量的通用算法,这些算法可以应用于多种容器类型,包括但不限于数组、向量、列表等。`<algorithm>`中的函数通常接受一对迭代器作为参数来指定数据范围,并能够直接对迭代器所指向的值进行操作,而不会改变容器本身的结构,如容器的大小或存储分配。
#### 不修改序列的方法
这部分方法用于检查序列中元素的状态或特性,不会改变元素本身。
- **`bool all_of(first, last, pred)`**
- 功能:测试`[first, last)`区间内所有元素满足谓词`pred`时返回`true`,否则返回`false`。
- 示例:检查数组中所有数字是否都大于0。
- **`bool any_of(first, last, pred)`**
- 功能:测试`[first, last)`区间内是否有至少一个元素满足谓词`pred`,若是则返回`true`。
- 示例:检查数组中是否存在任何偶数。
- **`bool none_of(first, last, pred)`**
- 功能:与`all_of`相反,测试`[first, last)`区间内所有元素都不满足谓词`pred`时返回`true`。
- 示例:检查数组中是否没有负数。
- **`void for_each(first, last, fn)`**
- 功能:对`[first, last)`区间内的每个元素应用函数`fn`,并返回函数`fn`的右值引用。
- 示例:对数组中的每个元素执行平方运算。
- **`InputIterator find(first, last, val)`**
- 功能:在`[first, last)`区间内查找首次出现的值`val`,并返回指向该元素的迭代器。
- 示例:查找数组中第一个等于5的元素。
- **`InputIterator find_if(first, last, pred)`**
- 功能:在`[first, last)`区间内查找首次满足谓词`pred`的元素,并返回指向该元素的迭代器。
- 示例:查找数组中第一个偶数。
- **`InputIterator find_if_not(first, last, pred)`**
- 功能:与`find_if`相反,在`[first, last)`区间内查找首次不满足谓词`pred`的元素。
- 示例:查找数组中第一个奇数。
- **`Iterator find_first_of(first1, last1, first2, last2)`**
- 功能:在`[first1, last1)`区间内查找首次出现在`[first2, last2)`区间内的元素,并返回对应的迭代器。
- 示例:查找数组1中首次出现在数组2中的元素。
- **`Iterator find_end(first1, last1, first2, last2)`**
- 功能:在`[first1, last1)`区间内查找最后一次出现在`[first2, last2)`区间内的子序列,并返回对应的迭代器。
- 示例:查找数组1中最后一次出现在数组2中的子序列。
- **`Iterator adjacent_find(first, last)`**
- 功能:在`[first, last)`区间内查找首次相邻重复元素,并返回指向该重复元素的迭代器。
- 示例:查找数组中首次出现的相邻重复元素。
- **`Int count(first, last, val)`**
- 功能:统计`[first, last)`区间内等于`val`的元素数量。
- 示例:统计数组中等于3的元素的数量。
- **`Int count_if(first, last, pred)`**
- 功能:统计`[first, last)`区间内满足谓词`pred`的元素数量。
- 示例:统计数组中偶数的数量。
- **`pair mismatch(first1, last1, first2)`**
- 功能:查找`[first1, last1)`区间与以`first2`开始的序列首次不匹配的位置,并返回不匹配位置的迭代器对。
- 示例:找出两个数组首次不相等的元素位置。
- **`bool equal(first1, last1, first2)`**
- 功能:判断`[first1, last1)`区间与以`first2`开始的序列是否完全相等。
- 示例:判断两个数组是否完全相等。
- **`bool is_permutation(first1, last1, first2)`**
- 功能:判断`[first1, last1)`区间与以`first2`开始的序列是否是彼此的排列。
- 示例:判断两个数组是否互为排列。
- **`ForwardIterator search(first1, last1, first2, last2)`**
- 功能:在`[first1, last1)`区间内查找首次与`[first2, last2)`区间匹配的子序列,并返回匹配起始位置的迭代器。
- 示例:查找一个字符串中首次出现另一个字符串的位置。
- **`ForwardIterator search_n(first, last, count, val)`**
- 功能:在`[first, last)`区间内查找首次连续出现`count`次`val`的子序列,并返回匹配起始位置的迭代器。
- 示例:查找数组中首次连续出现4次数字2的位置。
#### 修改序列的方法
这部分方法会直接修改序列内的元素。
- **`Iterator copy(first, last, Iterator result)`**
- 功能:将`[first, last)`区间内的元素复制到以`result`为起点的新区间。
- 示例:将一个数组复制到另一个数组。
- **`Iterator copy_n(first, n, Iterator result)`**
- 功能:从`first`开始复制`n`个元素到以`result`为起点的新区间。
- 示例:复制数组前5个元素到新数组。
- **`OutputIterator copy_if(first, last, result, pred)`**
- 功能:从`[first, last)`区间内复制满足谓词`pred`的元素到以`result`为起点的新区间。
- 示例:复制数组中的所有偶数到新数组。
- **`Iterator copy_backward(first, last, result)`**
- 功能:将`[first, last)`区间内的元素复制到以`result`为终点的新区间。
- 示例:将一个数组反向复制到另一个数组。
- **`Iterator move(first, last, result)`**
- 功能:将`[first, last)`区间内的元素移动到以`result`为起点的新区间。
- 示例:将一个数组移动到另一个数组。
- **`Iterator move_backward(first, last, result)`**
- 功能:将`[first, last)`区间内的元素移动到以`result`为终点的新区间。
- 示例:将一个数组中的元素反向移动到另一个数组。
- **`void fill(first, last, value)`**
- 功能:将`[first, last)`区间内的所有元素设置为`value`。
- 示例:将数组中的所有元素设置为0。
- **`void fill_n(first, n, value)`**
- 功能:从`first`开始的前`n`个元素设置为`value`。
- 示例:将数组前10个元素设置为1。
以上介绍了`<algorithm>`库中部分常用且重要的函数及其功能,通过这些函数的应用,可以极大地简化C++程序中对数据处理的复杂度,提高编程效率。需要注意的是,这些函数的具体用法和参数可能会根据编译器版本和标准的不同有所变化,因此在实际使用过程中应参照官方文档。
1