cppreference_docs

发布于:2025-09-04 ⋅ 阅读:(22) ⋅ 点赞:(0)

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

下面的函数可以不用去刻意地记, 但是需要知道的是其函数求解的思路 , 本质就是灵活地运用for/while和if...else  for循环中套if...else...    if...else...中套for循环

for_each

count

cout_if 

所有加了if的操作, 可以理解为一种选择, 比如上面就是选择性计数  需要自定义选择性函数

find, find_if, find_if_not

find_if选择性find   find_if_not选择性不find  

 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;
}

fill_n

lower_bound

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

upper_bound

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

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

equal_range

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

copy, copy_if

transform

把字符串中的小写字母变成大写字母

merge

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

qsort

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

sort

iota

decltype 

back_inserter

front_inserter

advance

remove, remove_if

bind1st和bind2nd

hypot


网站公告

今日签到

点亮在社区的每一天
去签到