第三节 · 瑞士军刀 · 泛型算法
标准库不仅提供了容器,还提供了一套强大的算法。这些算法可以作用于几乎任何容器,就像一把瑞士军刀,一套工具解决多种问题。
算法的基本使用
算法定义在 <algorithm> 头文件中,通过迭代器操作容器:
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> v = {5, 2, 8, 1, 9, 3, 7};
// 排序
sort(v.begin(), v.end());
// v: 1, 2, 3, 5, 7, 8, 9
// 查找
auto it = find(v.begin(), v.end(), 5);
if (it != v.end())
cout << "找到 5,位置: " << (it - v.begin()) << endl;
// 反转
reverse(v.begin(), v.end());
// v: 9, 8, 7, 5, 3, 2, 1
return 0;
}只读算法
这些算法不修改容器内容:
修改算法
这些算法会修改容器或输出容器:
排序算法
二分查找算法
用于已排序的序列:
最值算法
排列算法
自定义比较函数
大多数算法都支持自定义比较:
习题
使用算法找出数组中第二大的元素。
使用算法统计字符串中各字符出现的次数。
使用
next_permutation生成字符串的所有排列。
Last updated