algorithm:算法库

发布时间 2023-04-22 16:10:58作者: linux星

#include <algorithm>
using namespace std;
// 常用函数
sort(begin, end); // 对区间进行排序
reverse(begin, end); // 对区间进行翻转
rotate(begin, middle, end); // 将区间按照middle为界旋转
unique(begin, end); // 去除区间中相邻的重复元素
min_element(begin, end); // 找到区间中最小元素的迭代器
max_element(begin, end); // 找到区间中最大元素的迭代器
find(begin, end, value); // 在区间中查找值为value的元素的迭代器
count(begin, end, value); // 统计区间中值为value的元素的个数
// 定义
struct Person {
    string name;
    int age;
};
bool compare(Person p1, Person p2) { // 自定义排序函数,按照年龄从小到大排序
    return p1.age < p2.age;
}

#include <algorithm>
using namespace std;
vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
// 对vector进行排序
sort(v.begin(), v.end()); // 按照默认规则(从小到大)排序
sort(v.rbegin(), v.rend()); // 按照从大到小排序
// 对vector进行翻转
reverse(v.begin(), v.end());
// 对vector进行旋转
rotate(v.begin(), v.begin() + 3, v.end()); // 将前三个元素旋转到vector末尾
// 去除vector中相邻的重复元素
v.erase(unique(v.begin(), v.end()), v.end());
// 找到vector中的最小元素和最大元素
int min_element = *min_element(v.begin(), v.end());
int max_element = *max_element(v.begin(), v.end());
// 在vector中查找某个元素
auto it = find(v.begin(), v.end(), 5); // 查找元素5在vector中的位置
if (it != v.end()) {
    cout << "5 found in vector" << endl;
} else {
    cout << "5 not found in vector" << endl;
}
// 统计vector中某个元素的个数
int count = count(v.begin(), v.end(), 5); // 统计vector中元素5的个数

#include <algorithm>
#include <vector>
#include <string>
using namespace std;
vector<Person> people = {{"Alice", 20}, {"Bob", 18}, {"Charlie", 22}};
// 自定义排序
sort(people.begin(), people.end(), compare); // 按照年龄从小到大排序
// 自定义查找
auto it = find_if(people.begin(), people.end(), [](const Person& p) {
    return p.name == "Alice";
}); // 查找名字为"Alice"的人在people中的位置
if (it != people.end()) {
    cout << "Alice found in people" << endl;
} else {
    cout << "Alice not found in people" << endl;
}
// 自定义操作
vector<string> names;
transform(people.begin(), people.end(), back_inserter(names), [](const Person& p) {
    return p.name;
}); // 将people中的人的名字提取出来,存储到names中