C++标准库常用算法

一、 算法简介
  1. 标准库算法的作用

    • 提供通用、高效的数据操作(如排序、查找、遍历),避免重复造轮子。
    • 通过迭代器抽象,适配任意容器(如vectorlist、数组)。
  2. 核心头文件

    #include <algorithm>  // 大多数算法
    #include <numeric>   // 数值算法(如累加)
    
  3. 算法分类

    类别 示例算法 功能
    遍历算法 for_each, transform 对每个元素执行操作
    排序算法 sort, stable_sort 按规则排序
    查找算法 find, binary_search 搜索特定元素
    数值算法 accumulate, inner_product 数学计算(求和、点积)
    范围算法(C++20) ranges::sort, ranges::find 更安全、简洁的范围操作

二、 迭代器简介
  1. 迭代器类型

    迭代器 支持操作
### 稳定排序(`stable_sort`)与普通排序(`sort`)的区别 #### 定义上的差异 稳定排序 (`stable_sort`) 是一种能够维持相等元素原有顺序的排序方法,而普通排序 (`sort`) 则无法保证这一点。这意味着当两个元素被认为是“相同”的时候,在 `stable_sort` 中它们在原始序列中的相对位置会被保留下来,而在 `sort` 中则可能被重新排列[^1]。 #### 实现方式的不同 `sort` 函数通常基于快速排序的思想来实现,这种算法虽然效率较高,但在处理具有重复值的数据集时可能会打乱这些重复项原本的位置关系;相比之下,`stable_sort` 更倾向于采用归并排序的方式完成操作,这种方式天然具备稳定性——即不会破坏同等数值间既有的次序安排[^2]。 #### 功能对比 从应用角度来看,`stable_sort()` 可视为是对标准库中已存在的 `sort()` 方法的一种增强版本。两者适用于相似的情境,并共享一致的操作接口定义形式,但前者额外提供了保护那些被认为相等项目之间初始布局的能力[^3]。 #### 技术细节说明 以下是关于 C++ 标准模板库(STL)里头所提供的两种主要排序机制的技术描述: - **语法结构**: ```cpp template <class RandomAccessIterator> void stable_sort (RandomAccessIterator first, RandomAccessIterator last); template <class RandomAccessIterator, class Compare> void stable_sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); ``` 上述代码片段展示了如何调用带有自定义比较器或者默认行为下的 `stable_sort` 过程[^4]。 - **性能考量**: 尽管 `stable_sort` 提供了更强大的保障措施,但它往往伴随着更高的时间复杂度以及空间需求作为代价。具体而言,其最坏情况下的运行时间为 O(n log n),并且需要额外的工作存储区支持数据交换过程。 ```cpp #include <vector> #include <algorithm> int main(){ std::vector<int> vec = {5, 3, 8, 6, 2}; // 使用普通的 sort 排序 std::sort(vec.begin(), vec.end()); // 如果希望保持某些特定条件下原数组内部同值成员间的先后秩序,则改用如下命令代替上述那一句即可达到目的。 std::stable_sort(vec.begin(), vec.end()); return 0; } ``` 通过以上示例可以看出,在实际编码过程中切换至更加稳健可靠的选项是多么简单直接的一件事情!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值