C++ 的 `<algorithm>` 头文件提供了许多高效的算法函数，以下是常用函数及示例：

---

### **1. 排序与查找**
#### **`sort()`**：对容器排序
```cpp
#include <algorithm>
#include <vector>
using namespace std;

vector<int> v = {3, 1, 4, 1, 5};
sort(v.begin(), v.end()); // 默认升序
// v = {1, 1, 3, 4, 5}

// 自定义排序：降序
sort(v.begin(), v.end(), greater<int>());
```

#### **`binary_search()`**：二分查找（需已排序）
```cpp
if (binary_search(v.begin(), v.end(), 4)) {
    cout << "找到4!" << endl;
}
```

#### **`find()`**：查找元素
```cpp
auto it = find(v.begin(), v.end(), 3);
if (it != v.end()) {
    cout << "找到3，位置：" << it - v.begin() << endl;
}
```

---

### **2. 元素操作**
#### **`reverse()`**：反转容器
```cpp
reverse(v.begin(), v.end()); // v = {5, 4, 3, 1, 1}
```

#### **`fill()`**：填充容器
```cpp
vector<int> vec(5);
fill(vec.begin(), vec.end(), 10); // 全部填充为10
```

#### **`replace()`**：替换元素
```cpp
replace(v.begin(), v.end(), 1, 99); // 将所有1替换为99
```

---

### **3. 条件判断**
#### **`count()`**：统计元素出现次数
```cpp
int cnt = count(v.begin(), v.end(), 1);
```

#### **`count_if()`**：按条件统计
```cpp
int even_cnt = count_if(v.begin(), v.end(), [](int x) {
    return x % 2 == 0; // 统计偶数
});
```

#### **`all_of()` / `any_of()`**：检查元素条件
```cpp
bool all_even = all_of(v.begin(), v.end(), [](int x) {
    return x % 2 == 0;
});
```

---

### **4. 数值处理**
#### **`max_element()` / `min_element()`**：找最大/最小值
```cpp
auto max_it = max_element(v.begin(), v.end());
cout << "最大值：" << *max_it << endl;
```

#### **`accumulate()`**：累加（需 `<numeric>`）
```cpp
#include <numeric>
int sum = accumulate(v.begin(), v.end(), 0); // 初始值为0
```

---

### **5. 变换与生成**
#### **`transform()`**：对每个元素操作
```cpp
vector<int> squared;
transform(v.begin(), v.end(), back_inserter(squared),
          [](int x) { return x * x; });
```

#### **`generate()`**：生成新值填充容器
```cpp
vector<int> nums(5);
int n = 0;
generate(nums.begin(), nums.end(), [&n]() { return n++; });
// nums = {0, 1, 2, 3, 4}
```

---

### **6. 集合操作**
#### **`unique()`**：去重（需先排序）
```cpp
sort(v.begin(), v.end());
auto last = unique(v.begin(), v.end());
v.erase(last, v.end()); // 删除重复项
```

#### **`merge()`**：合并两个有序序列
```cpp
vector<int> v1 = {1, 3, 5}, v2 = {2, 4, 6}, result(6);
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin());
// result = {1, 2, 3, 4, 5, 6}
```

---

### **7. 分区与乱序**
#### **`partition()`**：按条件分区
```cpp
auto it = partition(v.begin(), v.end(),
                   [](int x) { return x % 2 == 0; });
// 偶数在前，奇数在后
```

#### **`shuffle()`**：随机打乱（需 `<random>`）
```cpp
#include <random>
shuffle(v.begin(), v.end(), default_random_engine());
```

---

### **示例代码汇总**
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
using namespace std;

int main() {
    vector<int> v = {3, 1, 4, 1, 5};
    
    // 排序
    sort(v.begin(), v.end());
    
    // 查找
    if (binary_search(v.begin(), v.end(), 4)) {
        cout << "找到4!" << endl;
    }
    
    // 累加
    int sum = accumulate(v.begin(), v.end(), 0);
    
    return 0;
}
```

---

这些函数能显著简化代码并提高效率，建议结合 C++ 文档深入学习参数和高级用法。