注意:这篇文章上次更新于1513天前,文章内容可能已经过时。
This article was last updated1513 days ago, the content may be outdated.
修改序列的算法
copy
将一个容器范围内的元素拷贝到另一个位置。
输入参数:
- 起始迭代器
- 终止迭代器
- 拷贝结果的起始迭代器
函数行为:
1 | template <class InputIterator, class OutputIterator> |
示例代码:
1 | // copy algorithm example |
copy_n
将一个容器内 n 个元素拷贝到另一个位置
参数:
- 起始迭代器
- 待拷贝元素个数 n
- 拷贝结果的起始迭代器
函数行为:
1 | template <class InputIterator, class Size, class OutputIterator> |
示例代码:
1 | // copy_n algorithm example |
copy_if
拷贝一个范围内满足条件的元素到目标位置
参数:
- 起始迭代器
- 终止迭代器
- 拷贝结果的起始迭代器
- 返回值是 bool 的一元函数
函数行为:
1 | template <class InputIterator, class OutputIterator, class UnaryPredicate> |
示例代码:
1 | // copy_if example |
copy_backward
反向拷贝(具体看函数行为)
参数:
- 起始迭代器
- 终止迭代器
- 拷贝结果的起始迭代器
函数行为:
1 | template <class BidirectionalIterator1, class BidirectionalIterator2> |
示例代码:
1 | // copy_backward example |
move
移动元素,行为可 copy 差不多,只是使用了移动语义。
参数:
- 起始迭代器
- 终止迭代器
- 移动结果的起始迭代器
函数行为:
1 | template <class InputIterator, class OutputIterator> |
示例代码:
1 | // move algorithm example |
move_backward
反向移动
函数行为:
1 | template <class BidirectionalIterator1, class BidirectionalIterator2> |
示例代码:
1 | // move_backward example |
swap
交换两个元素,或元素数量相同的容器。
C++ 11 版本使用了移动语义。
函数行为:
1 | template <class T> |
示例代码:
1 | // swap algorithm example (C++98) |
swap_ranges
范围交换
参数:
- 起始迭代器
- 终止迭代器
- 第二个容器的起始迭代器
函数行为:
1 | template <class ForwardIterator1, class ForwardIterator2> |
示例代码:
1 | // swap_ranges example |
iter_swap
交换两个迭代器所指向的元素。
函数行为:
1 | template <class ForwardIterator1, class ForwardIterator2> |
示例代码:
1 | // iter_swap example |
transform 🚩
改变序列元素,根据某个规则。这应该是比较常用的算法了。
参数:
- 起始迭代器
- 终止迭代器
- 结果起始迭代器
- 一元函数或二元函数(如果是二元函数 还需要传入 first2)
函数行为:
1 | template <class InputIterator, class OutputIterator, class UnaryOperator> |
示例代码:
1 | // transform algorithm example |
replace
替换
参数:
- 起始迭代器
- 终止迭代器
- 旧值
- 新值
函数行为:
1 | template <class ForwardIterator, class T> |
示例代码:
1 | // replace algorithm example |
replace_if
条件替换
参数:
- 起始迭代器
- 终止迭代器
- 一元条件判断函数
- 新值
函数行为:
1 | template <class ForwardIterator, class UnaryPredicate, class T> |
示例代码:
1 | // replace_if example |
replace_copy
拷贝并替换(就是把 copy 和 replace 合并了😂)
参数:
- 起始迭代器
- 终止迭代器
- 拷贝结果迭代器
- 旧值
- 新值
函数行为:
1 | template <class InputIterator, class OutputIterator, class T> |
示例代码:
1 | // replace_copy example |
replace_copy_if
上一个函数的 if 版本
参数:
- 起始迭代器
- 终止迭代器
- 拷贝结果的起始迭代器
- 一元条件判断函数
- 新值
函数行为:
1 | template <class InputIterator, class OutputIterator, class UnaryPredicate, class T> |
示例代码:
1 | // replace_copy_if example |
fill
将范围内的元素设置为指定值
参数:
- 起始迭代器
- 终止迭代器
- 值
函数行为:
1 | template <class ForwardIterator, class T> |
示例代码:
1 | // fill algorithm example |
fill_n
上一个函数的指定个数版本。
参数:
- 起始迭代器
- 个数
- 值
函数行为:
1 | template <class OutputIterator, class Size, class T> |
示例代码:
1 | // fill_n example |
generate
fill 是填充指定值,这个函数中填充的值可以通过自定义函数获得。
参数:
- 起始迭代器
- 终止迭代器
- 一个返回值是元素值类型的无参函数
函数行为:
1 | template <class ForwardIterator, class Generator> |
示例代码:
1 | // generate algorithm example |
generate_n
上一个函数的指定格式版本。
参数:
- 起始迭代器
- 个数
- 一个返回值是元素值类型的无参函数
函数行为:
1 | template <class OutputIterator, class Size, class Generator> |
示例代码:
1 | // generate_n example |
remove🚩
移除容器中指定值的元素(看这源代码 感觉不是很好用啊)
参数:
- 起始迭代器
- 终止迭代器
- 值
函数行为:
1 | template <class ForwardIterator, class T> |
示例代码:
1 | // remove algorithm example |
remove_if
上一个函数的 if 版本
参数:
- 起始迭代器
- 终止迭代器
- 谓词函数
函数行为:
1 | template <class ForwardIterator, class UnaryPredicate> |
示例代码:
1 | // remove_if example |
remove_copy
移除并拷贝
参数:
- 起始迭代器
- 终止迭代器
- 拷贝结果迭代器
- 值
函数行为:
1 | template <class InputIterator, class OutputIterator, class T> |
示例代码:
1 | // remove_copy example |
remove_copy_if
上一个函数的 if 版本
- 起始迭代器
- 终止迭代器
- 拷贝结果迭代器
- 谓词函数
函数行为:
1 | template <class InputIterator, class OutputIterator, class UnaryPredicate> |
示例代码:
1 | // remove_copy_if example |
unique
对容器中连续相等的元素进行去重。其中第三个参数可选,相当于 unique 和 unique_if 合在一起了,不明白为什么不加一个 unique_if 函数。
- 起始迭代器
- 终止迭代器
- 用于相邻元素的比较函数(可选)
函数行为:
1 | template <class ForwardIterator> |
示例代码:
1 | // unique algorithm example |
unique_copy
去重并拷贝。也是两个版本。
函数行为:
1 | template <class InputIterator, class OutputIterator> |
示例代码:
1 | // unique_copy example |
reverse🚩
反转,这个用的也很多。
参数:
- 起始迭代器
- 终止迭代器
函数行为:
1 | template <class BidirectionalIterator> |
示例代码:
1 | // reverse algorithm example |
reverse_copy
上一个函数的 copy 版本。
参数:
- 起始迭代器
- 终止迭代器
- 拷贝结果迭代器
函数行为:
1 | template <class BidirectionalIterator, class OutputIterator> |
示例代码:
1 | // reverse_copy example |
rotate
向左旋转容器中的元素。
函数行为:
1 | template <class ForwardIterator> |
示例代码:
1 | // rotate algorithm example |
rotate_copy
上一个函数的 copy 版本
直接调用两个 copy ,写的挺优雅的。
函数行为:
1 | template <class ForwardIterator, class OutputIterator> |
示例代码:
1 | // rotate_copy algorithm example |
random_shuffle
随机打乱序列。
有两个版本 ,一个是指定随机函数的,一个不指定。
具体用法看示例代码
函数行为:
1 | template <class RandomAccessIterator, class RandomNumberGenerator> |
示例代码:
1 | // random_shuffle example |
shuffle
和上一个差不多吧
函数行为:
1 | template <class RandomAccessIterator, class URNG> |
示例代码:
1 | // shuffle algorithm example |


