目录
- 1.
std::sort
- 2.
std::reverse
- 3.
std::find
- 4.
std::copy
- 5.
std::equal
- 6.
std::for_each
- 7.
std::unique
- 8.
std::transform
- 总结
#include <algorithm>
是 C++ 标准库中的一个头文件,包含了许多常用的算法函数,提供了操作容器、范围和数据的功能。这个库中的算法大多数是通用的,可以应用于不同的数据结构,比如数组、向量、列表等。
大多数 <algorithm>
中的函数都遵循以下基本语法:
algorithm_name(container.begin(), container.end(), ...);
这里的 container
是一个容器对象,begin()
和 end()
是容器的成员函数,返回指向容器开始和结束的迭代器。
1. std::sort
对范围内的元素进行升序排序。
sort(container.begin(), container.end(), compare_function);
其中 compare_function 是一个可选的比较函数,用于自定义排序方式。
示例:
#include <algorithm>
#include <vector>
int main() {
std::vector<int> v = {5, 2, 9, 1, 5, 6};
std::sort(v.begin(), v.end()); // 对 vector 进行升序排序
return 0;
}
2. std::reverse
将范围内的元素顺序逆转。
示例:
#include <algorithm>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::reverse(v.begin(), v.end()); // 将 vector 中的元素顺序颠倒
return 0;
}
3. std::find
在范围内查找等于某个值的第一个元素,返回指向该元素的迭代器。
auto it = find(container.begin(), container.end(), value);
示例:
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {10, 20, 30, 40, 50};
auto it = std::find(v.begin(), v.end(), 30); // 查找值为 30 的元素
if (it != v.end()) {
std::cout << "Found: " << *it << std::endl;
}
return 0;
}
4. std::copy
将一个范围内的元素复制到另一个容器或数组。
copy(source_begin, source_end, destination_begin);
示例:
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> src = {1, 2, 3, 4, 5};
std::vector<int> dest(5);
std::copy(src.begin(), src.end(), dest.begin()); // 复制元素
return 0;
}
5. std::equal
比较两个容器或两个范围内的元素是否相等。
bool result = equal(first1, last1, first2);
或
bool result = equal(first1, last1, first2, compare_function);
示例:
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = {1, 2, 3, 4, 5};
bool are_equal = std::equal(v1.begin(), v1.end(), v2.begin());
std::cout << (are_equal ? "Vectors are equal." : "Vectors are not equal.") << std::endl;
return 0;
}
输出:
Vectors are equal.
6. std::for_each
对范围内的每个元素执行给定的操作。
示例:
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::for_each(v.begin(), v.end(), [](int &n){ n *= 2; }); // 将每个元素翻倍
return 0;
}
7. std::unique
移除相邻的重复元素,返回新范围的末尾迭代器(但并不改变容器的大小)。
示例:
#include <algorithm>
#include <vector>
int main() {
std::vector<int> v = {1, 1, 2, 2, 3, 4, 4};
auto new_end = std::unique(v.begin(), v.end()); // 移除相邻的重复元素
v.erase(new_end, v.end()); // 移除重复元素之后删除冗余的部分
return 0;
}
8. std::transform
对每个元素应用一个操作,并将结果存储在另一个范围内。
示例:
#include <algorithm>
#include <vector>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
std::vector<int> result(5);
std::transform(v.begin(), v.end(), result.begin(), [](int x){ return x * x; }); // 对每个元素求平方
return 0;
}
总结
<algorithm>
头文件包含了大量的标准算法函数,这些函数操作泛型范围,可以应用于不同类型的容器。这些算法通常不会修改容器的大小,但它们会改变范围内的元素顺序或内容。大多数算法依赖于迭代器来操作容器,从而实现高效和通用的代码。
这个库非常强大且实用,是现代 C++ 编程中的重要组成部分。
标签:std,begin,end,int,C++,vector,include From: https://www.cnblogs.com/keye/p/18399596