✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
????文章专栏 | ||
「C/C++」C/C++程序设计 | ||
????全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
目录
-
- std::algorithm库深度解析
-
- 引言
- 一、遍历算法
- 二、查找算法
- 三、复制算法
- 四、交换算法
- 五、变换算法
- 六、排序算法
- 七、集合算法
- 八、移除算法
- 结论
std::algorithm库深度解析
引言
std::algorithm
是C++标准库的核心组成部分,它封装了一系列高效、通用的非成员函数模板,用于对容器中的元素执行各种操作。这些算法不仅简化了编程工作,还提高了代码的可读性和可维护性。本文将详细探讨std::algorithm
库中的遍历、查找、复制、交换、变换、排序、集合和移除算法,并通过具体的代码实例来展示它们的应用。
一、遍历算法
遍历算法用于遍历容器中的元素,但通常不直接修改它们。std::for_each
是std::algorithm
库中提供的遍历算法之一。
代码实例:
std::for_each
遍历容器
#include <iostream>
#include <vector>
#include <algorithm>
void print(int n)
{
std::cout << n << ' ';
}
//函数对象
class print02
{
public:
void operator()(int val)
{
std::cout << val << " ";
}
};
int main() {
std::vector<int> vec = {
1, 2, 3, 4, 5};
// lambda表达式形式输出
std::for_each(vec.begin(), vec.end(), [](const int& n) {
std::cout << n << ' ';
});
std::cout << std::endl;
// 普通函数函数形式遍历
std::for_each(vec.begin(), vec.end(), print);
std::cout << std::endl;
// 函数对象形式遍历
std::for_each(vec.begin(), vec.end(), print02());
std::cout << std::endl;
// 输出:1 2 3 4 5
// 输出:1 2 3 4 5
// 输出:1 2 3 4 5
return 0;
}
二、查找算法
查找算法用于在容器中查找满足特定条件的元素。std::find
、std::find_if
和std::find_if_not
是常见的查找算法。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
std::vector<int> vec = {
1, 2, 2, 3, 4, 5};
// std::find 查找值为3的元素
auto it1 = std::find(vec.begin(), vec.end(), 3);
if (it1 != vec.end()) {
std::cout << "Found 3 at position: " << std::distance(vec.begin(), it1) << std::endl;
}
// std::find_if 条件查找第一个大于3的元素
auto it2 = std::find_if(vec.begin(), vec.end(), [](int n) {
return n > 3; });
if (it2 != vec.end()) {
std::cout << "Found first element g