C++ 的 <algorithm>
头文件提供了许多常用的算法,这些算法可以用于对容器中的元素进行排序、搜索、比较等操作。以下是一些常用的方法:
一、常用方法
1、 排序算法:
sort()
:对容器中的元素进行排序。
stable_sort()
:对容器中的元素进行稳定排序。
partial_sort()
:部分排序,将前几个元素排好序。
nth_element()
:将指定位置的元素移到正确的位置,其他元素不保证顺序。
is_sorted()
:检查容器是否已经排序。
2、 查找算法:
find()
:查找容器中指定值的元素。
find_if()
:根据指定的条件查找容器中的元素。
count()
:计算容器中指定值的出现次数。
binary_search()
:在有序序列中进行二分查找。
3、 合并和删除算法:
merge()
:将两个有序序列合并成一个有序序列。
remove()
:删除容器中指定值的元素。
remove_if()
:根据指定的条件删除容器中的元素。
unique()
:去除容器中的重复元素。
4、 变换算法:
transform()
:对容器中的元素进行变换。
copy()
:将一个容器的元素复制到另一个容器。
replace()
:将容器中指定值的元素替换为新值。
5、 数值算法:
accumulate()
:计算容器中元素的累加值。
min_element()
、max_element()
:找到容器中最小和最大的元素。
count_if()
:根据指定条件计算容器中满足条件的元素个数。
6、 其他算法:
reverse()
:反转容器中的元素顺序。
random_shuffle()
:随机打乱容器中的元素顺序。
这些算法都以泛型的方式设计,可以用于各种类型的容器,如数组、向量、列表、集合等,使得代码更加灵活和可复用。
二、Demo演示
#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
int main() {
// 创建一个整数向量
std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
// 打印原始向量
std::cout << "Original vector: ";
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
// 排序算法
std::sort(vec、begin(), vec、end());
std::cout << "Sorted vector: ";
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
// 查找算法
auto iter = std::find(vec、begin(), vec、end(), 5);
if (iter != vec、end()) {
std::cout << "Found value 5 at index: " << std::distance(vec、begin(), iter) << std::endl;
} else {
std::cout << "Value 5 not found in vector、" << std::endl;
}
// 删除算法
vec、erase(std::remove(vec、begin(), vec、end(), 3), vec、end());
std::cout << "Vector after removing value 3: ";
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
// 数值算法
int sum = std::accumulate(vec、begin(), vec、end(), 0);
std::cout << "Sum of elements in vector: " << sum << std::endl;
// 变换算法
std::transform(vec、begin(), vec、end(), vec、begin(), [](int x) { return x * x; });
std::cout << "Vector after squaring each element: ";
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
// Original vector: 3 1 4 1 5 9 2 6 5 3
// Sorted vector: 1 1 2 3 3 4 5 5 6 9
// Found value 5 at index: 6
// Vector after removing value 3: 1 1 2 4 5 5 6 9
// Sum of elements in vector: 33
// Vector after squaring each element: 1 1 4 16 25 25 36 81