C++ Std partition point

2024年8月28日 | 阅读 4 分钟

partition point() 获取分区点:返回一个迭代器,指向范围 [first, last] 中第一个 pred(谓词) 为 false 的分区元素,指示该元素的分区点。

就好像已使用相同的输入调用了 partition,范围的元素必须已经分区。

该函数比较已排序范围的非连续元素,这对于随机访问迭代器尤其有效,可以减少比较次数。

返回给定范围中第一个 pred 为 false 的元素需要使用 C++ 算法 partition point() 函数。元素被排列成满足条件的元素放置在不满足条件的元素之前。

语法

first 和 last 参数是向前迭代器,分别指向已分区序列的开头和结尾。已测试的范围是 [first, last],它包含 first 和 last 之间的所有元素,但不包括 last 指向的元素。

一个一元函数,它将范围元素作为参数并返回一个可转换为布尔值的值。结果显示元素是否在分区点之前(如果为 true,则在之前;如果为 false,则在分区点或之后)。其参数不能被函数修改。这可以是一个函数对象或函数指针。

返回值:如果 pred 对于任何元素都为 false,则返回一个迭代器,指向分区范围 [first, last] 中的最后一个元素,或者如果 pred 对于任何元素都为 false,则返回最后一个元素。

此函数模板的定义等效于

示例

输出

odd:  1 3 5 7 9
even: 2 4 6 8 10

示例

输出

Negative:  -1 -4 -2 -5 -3
Positive:  1 3 5 2 4

执行大约 log2(N)+2 次元素比较(其中 N 是此距离)。在非随机访问迭代器上,迭代器前进平均会为 N 增加线性复杂度。

示例

输出

odd: 1 3 5 7 9
even: 2 4 6 8 10