当前位置: 首页 > news >正文

Algorithms library

概念参数数量返回值类型核心用途典型算法依赖
UnaryPredicate1bool单元素条件判断count_if、find_if、remove_if
UnaryFunction1任意类型单元素转换、计算transform(一元版)
BinaryPredicate2bool双元素关系判断sort、unique、merge
BinaryFunction2任意类型双元素组合、计算transform(二元版)、inner_product
Generator0任意类型无参数生成值generate、generate_n
Procedure任意void执行副作用操作for_each

for_each

count

cout_if

find, find_if, find_if_not

fill_n

lower_bound

当相等的时候选择左边部分

upper_bound

注意!(value < *it) 等价于 (*it <= value)

当相等的时候选择右边部分

equal_range

它的本质是调用上面的两个函数

copy, copy_if

merge

merge是要求是排好顺序的, 并且是升序排序

partition

// 模板函数:将范围 [first, last) 按谓词 p 分区——满足 p 的元素移到前半段,不满足的移到后半段
// 模板参数说明:
//   ForwardIt:前向迭代器类型(支持 ++、解引用 *、iter_swap 操作,如 vector::iterator、list::iterator)
//   UnaryPredicate:一元谓词类型(接收单个元素参数,返回 bool,true 表示元素属于前半段)
// 参数说明:
//   first/last:待分区的左闭右开范围 [first, last),需提前确保迭代器合法
//   p:分区谓词(判断元素是否应放在前半段)
// 返回值:指向“前半段(满足 p)末尾、后半段(不满足 p)开头”的迭代器(即第一个不满足 p 的元素位置)
template<class ForwardIt, class UnaryPredicate>
ForwardIt partition(ForwardIt first, ForwardIt last, UnaryPredicate p)
{// 第一步:找到「第一个不满足谓词 p 的元素」,用 first 指向它// 作用:前半段的“待交换位置”从这个元素开始(因为它之前的元素都已满足 p,无需处理)// std::find_if_not:遍历 [first, last),返回第一个使 p 返回 false 的元素迭代器first = std::find_if_not(first, last, p);// 第二步:检查是否所有元素都满足 p(first 已指向 last,说明前半段就是整个范围)// 若所有元素都满足 p,直接返回 first(即 last),无需后续分区if (first == last) return first;// 第三步:遍历剩余元素(从 first 的下一个元素开始,记为 i),执行分区核心逻辑// i 是“当前待检查元素”的迭代器,遍历范围 [next(first), last)for (ForwardIt i = std::next(first); i != last; ++i) {// 核心判断:若当前元素 i 满足谓词 p(应属于前半段)if (p(*i)) {// 1. 交换 i 和 first 指向的元素:将满足 p 的元素 i 移到前半段的“待交换位置”first//    (此时 first 指向的是不满足 p 的元素,交换后该元素被移到 i 的位置,归入后半段)std::iter_swap(i, first);// 2. 将 first 向后移动一位:更新前半段的“待交换位置”(下一个不满足 p 的元素位置)++first;}// 若当前元素 i 不满足 p,无需操作,直接进入下一轮遍历(i 自然归入后半段)}// 循环结束后,first 恰好指向“前半段末尾、后半段开头”,返回该迭代器作为分区边界return first;
}

qsort

在C++标准库中,qsort函数被用于对数组进行排序。当排序时,如果比较函数(comp)指示两个元素相等,则这两个元素的相对顺序是不确定的。这意味着即使两个元素在逻辑上是等价的,qsort不会保证它们在排序后的数组中的顺序。

sort

http://www.dtcms.com/a/365328.html

相关文章:

  • Qoder如何免费续杯,立即参与实践分享,赢 1000Credits
  • 解决windows下火狐浏览器开机会同时启动两个或多个页面
  • 为何quest3设备会强制更新,如何屏蔽更新
  • GoogleNet:更深的网络与更高的效率
  • 大模型的偏见:从训练数据到推理结果,如何检测与修正?
  • Voicemod-免费即时变声器
  • 【程序人生】有梦想就能了不起,就怕你没梦想
  • Redis 集群模式与高可用机制
  • 深度学习篇---Adam优化器
  • 计算机网络模型总概述
  • python抖音弹幕获取方案
  • 考研复习-计算机网络-第二章-物理层
  • 服务器安装vnc服务端
  • 深度学习篇---InceptionNet网络结构
  • Ecovadis评估认证准备期间对于公司员工培训有没有什么技巧?
  • 对轮询的理解
  • 手持式气象观测仪在短期监测项目的作用
  • 深度学习之第六课卷积神经网络 (CNN)如何保存和使用最优模型
  • GOFLY开源客服系统-处理gin框架下的session中间件
  • 【线段树 懒删除堆】P12372 [蓝桥杯 2022 省 Python B] 最优清零方案|普及+
  • 【Python接口自动化】调用飞书机器人
  • TLSF内存算法适配HTOS
  • React实现列表拖拽排序
  • PyTorch实战(6)——模型微调详解
  • 落地页测试case(Android视角)
  • Redis突然挂了,数据丢了多少?就看你用RDB还是AOF
  • SecureCRT v9.5.2 Mac SSH终端操作工具
  • C++从入门到实战(二十一)List迭代器实现
  • 行业分享丨基于SimSolid的大型汽车连续冲压模具刚度分析
  • 【Axure高保真原型】区间缩放柱状图