核心概念
++
, *
, ->
)关键特性
cpp
vector<int>::iterator it; // 随机访问迭代器
list<int>::iterator lit; // 双向迭代器
类别 | 说明 | 头文件 |
---|---|---|
非可变序列算法 | 不修改容器内容(如查找、统计) |
|
可变序列算法 | 修改容器内容(如排序、替换) |
|
排序与搜索算法 | 排序、二分查找、集合操作 |
|
数值算法 | 数值计算(如累加、内积) |
|
算法 | 功能说明 | 示例代码片段 |
---|---|---|
count |
统计等于指定值的元素个数 | count(vec.begin(), vec.end(), 5) |
count_if |
统计满足条件的元素个数 | count_if(vec.begin(), vec.end(), [](int x){return x>3;}) |
binary_search |
有序序列中二分查找 | binary_search(arr, arr+size, 4) |
find |
返回第一个匹配元素的迭代器 | auto it = find(vec.begin(), vec.end(), 3); |
注意:binary_search
要求输入序列已排序。
算法 | 特性说明 | 使用场景示例 |
---|---|---|
sort |
快速排序(默认升序) | sort(vec.begin(), vec.end()); |
stable_sort |
稳定排序(保持相等元素顺序) | stable_sort(vec.begin(), vec.end(), greater |
nth_element |
快速选择第n小元素 | nth_element(vec.begin(), vec.begin()+5, vec.end()); |
partial_sort |
部分排序前N个元素 | partial_sort(vec.begin(), vec.begin()+3, vec.end()); |
自定义排序规则:
cpp
// 降序排列
sort(vec.begin(), vec.end(), [](int a, int b){return a > b;});
// 使用标准库比较函数
sort(vec.begin(), vec.end(), greater<int>());
算法 | 关键特性 | 注意事项 |
---|---|---|
remove |
逻辑删除(需配合erase 物理删除) |
vec.erase(remove(vec.begin(), vec.end(), 3), vec.end()); |
replace |
替换指定值 | replace(vec.begin(), vec.end(), 2, 99); |
unique |
去重相邻重复元素(需先排序) | auto last = unique(vec.begin(), vec.end()); |
swap |
交换两个容器内容 | swap(vec1, vec2); |
算法 | 功能说明 | 示例代码 |
---|---|---|
equal |
比较两个序列是否相等 | equal(vec1.begin(), vec1.end(), vec2.begin()); |
max_element |
返回最大元素的迭代器 | auto max_it = max_element(vec.begin(), vec.end()); |
mismatch |
查找首个不匹配元素对 | auto p = mismatch(vec1.begin(), vec1.end(), vec2.begin()); |
for_each
核心用法:
cpp
// 使用函数对象
struct Printer {
void operator()(int x) const { cout << x << " "; }
};
for_each(vec.begin(), vec.end(), Printer());
// 使用Lambda表达式(C++11+)
for_each(vec.begin(), vec.end(), [](int x){cout << x << " ";});
特性:
迭代器失效:在修改容器时(如erase
),注意迭代器可能失效。
算法选择
:
stable_sort
partial_sort
/nth_element
性能考虑
:
sort
对小数据量使用插入排序,大数据量使用快速排序remove
系列算法只逻辑删除,需配合erase
C++11+优化
:
auto
简化迭代器声明cpp
#include // 大多数算法
#include // 数值算法(accumulate, inner_product)
#include // 函数对象(greater, less)