📜  C++中的partition_point(1)

📅  最后修改于: 2023-12-03 14:39:57.219000             🧑  作者: Mango

C++中的partition_point

在C++标准库中,partition_point是一个非常有用的函数。其作用是查找序列中满足某个条件的元素的边界。

函数原型
template<class ForwardIt, class UnaryPredicate>
ForwardIt partition_point(ForwardIt first, ForwardIt last, UnaryPredicate p);
参数说明
  • first:序列的起始迭代器
  • last:序列的终止迭代器
  • p:一元谓词,用于判断元素是否满足条件
返回值

函数返回一个迭代器,指向第一个不满足条件的元素的位置。如果序列中所有元素都满足条件,则返回last

使用示例

下面是一个简单的使用示例,用于查找一个vector中所有大于5的元素的边界。

#include <iostream>
#include <algorithm>
#include <vector>

bool is_greater_than_5(int i)
{
    return i > 5;
}

int main()
{
    std::vector<int> v{3, 6, 8, 2, 7, 5, 9, 1};

    auto it = std::partition_point(v.begin(), v.end(), is_greater_than_5);

    std::cout << "The first element not greater than 5 is: " << *it << std::endl;

    return 0;
}

输出结果为:

The first element not greater than 5 is: 5

上述代码中,我们定义了一个谓词is_greater_than_5,用于判断元素是否大于5。然后调用了partition_point函数,查找第一个不大于5的元素的位置,最后输出此位置对应的元素值。

注意事项
  • 序列中的元素需要满足严格的弱序性(即可以进行一定的大小比较)
  • 序列需要是有序的,或者按某个规则已经被分成了两部分;否则将导致查找结果不正确
  • 如果序列中有重复的元素,partition_point返回的位置可能是有多个的