【C++】#include <algorithm>

#include <algorithm> 是 C++ 标准库中的一个头文件,它提供了很多常见的算法,用于对容器(如 vectorlistdeque)和数组等数据结构进行处理;这些算法不仅可以操作顺序容器(如数组和 vector),还可以操作关联容器(如 setmap)等

在使用 #include <algorithm> 时,常常会用到许多通用的操作,比如排序、查找、拷贝、合并、统计等;这些算法通常基于迭代器进行操作,因此可以广泛应用于不同的数据结构

#include <algorithm> 中的常见算法

1. 排序相关算法
  • std::sort(begin, end)
    对指定范围 [begin, end) 内的元素进行升序排序;其实现一般使用快速排序(QuickSort)或其他高效排序算法,时间复杂度为 O(n log n)

    示例:

    std::vector<int> vec = {4, 1, 3, 2};
    std::sort(vec.begin(), vec.end());  // 排序后的 vec 为 {1, 2, 3, 4}
    
  • std::stable_sort(begin, end)
    std::sort 相似,但它保证排序时保持相等元素的相对顺序不变,即稳定排序

    示例:

    std::vector<int> vec = {4, 1, 3, 2};
    std::stable_sort(vec.begin(), vec.end());  // 排序后的 vec 为 {1, 2, 3, 4}
    
2. 查找相关算法
  • std::find(begin, end, value)
    在指定范围内查找第一个等于 value 的元素;如果找到了,返回指向该元素的迭代器,否则返回 end

    示例:

    std::vector<int> vec = {1, 2, 3, 4};
    auto it = std::find(vec.begin(), vec.end(), 3);  // it 指向 3
    if (it != vec.end()) {
        std::cout << "Found!" << std::endl;
    }
    
  • std::binary_search(begin, end, value)
    在已排序的范围内进行二分查找,返回一个布尔值,表示是否找到元素 value

    示例:

    std::vector<int> vec = {1, 2, 3, 4, 5};
    bool found = std::binary_search(vec.begin(), vec.end(), 3);  // found 为 true
    
3. 修改相关算法
  • std::reverse(begin, end)
    将指定范围内的元素进行反转

    示例:

    std::vector<int> vec = {1, 2, 3, 4};
    std::reverse(vec.begin(), vec.end());  // vec 变为 {4, 3, 2, 1}
    
  • std::fill(begin, end, value)
    将指定范围内的所有元素都填充为 value

    示例:

    std::vector<int> vec(5);
    std::fill(vec.begin(), vec.end(), 10);  // vec 变为 {10, 10, 10, 10, 10}
    
  • std::transform(begin, end, result, func)
    对范围 [begin, end) 内的每个元素应用函数 func,并将结果存储到 result

    示例:

    std::vector<int> vec = {1, 2, 3, 4};
    std::vector<int> result(vec.size());
    std::transform(vec.begin(), vec.end(), result.begin(), [](int x) { return x * 2; });
    // result 为 {2, 4, 6, 8}
    
4. 拷贝与合并算法
  • std::copy(begin, end, dest)
    将指定范围 [begin, end) 的元素拷贝到目标容器 dest

    示例:

    std::vector<int> src = {1, 2, 3};
    std::vector<int> dest(3);
    std::copy(src.begin(), src.end(), dest.begin());  // dest 变为 {1, 2, 3}
    
  • std::merge(begin1, end1, begin2, end2, dest)
    将两个已排序的区间合并成一个新的已排序区间

    示例:

    std::vector<int> vec1 = {1, 3, 5};
    std::vector<int> vec2 = {2, 4, 6};
    std::vector<int> result(6);
    std::merge(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), result.begin());
    // result 为 {1, 2, 3, 4, 5, 6}
    
5. 集合操作算法
  • std::set_union(begin1, end1, begin2, end2, dest)
    计算两个已排序区间的并集,存储到 dest

    示例:

    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {2, 3, 4};
    std::vector<int> result(6);
    auto it = std::set_union(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), result.begin());
    result.resize(it - result.begin());  // result 为 {1, 2, 3, 4}
    
  • std::set_intersection(begin1, end1, begin2, end2, dest)
    计算两个已排序区间的交集,存储到 dest

    示例:

    std::vector<int> vec1 = {1, 2, 3, 4};
    std::vector<int> vec2 = {3, 4, 5, 6};
    std::vector<int> result(4);
    auto it = std::set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), result.begin());
    result.resize(it - result.begin());  // result 为 {3, 4}
    
6. 最小值与最大值相关算法
  • std::min(a, b)
    返回 ab 中较小的那个

    示例:

    int a = 5, b = 10;
    int minimum = std::min(a, b);  // minimum 为 5
    
  • std::max(a, b)
    返回 ab 中较大的那个

    示例:

    int a = 5, b = 10;
    int maximum = std::max(a, b);  // maximum 为 10
    
  • std::min_element(begin, end)
    返回范围内最小元素的迭代器

  • std::max_element(begin, end)
    返回范围内最大元素的迭代器

小结

#include <algorithm> 提供了一系列广泛使用的通用算法,能够有效地提高代码的简洁性和执行效率;通过这些算法,你可以轻松地进行排序、查找、修改、拷贝、合并等常见任务,从而简化手动实现这些操作的复杂性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值