📜  C++中的std :: is_partitioned(1)

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

C++中的std::is_partitioned介绍

在C++的STL中,有一个is_partitioned函数,该函数用于判断指定的范围是否满足指定的分区条件。

1. 基本用法

is_partitioned的基本用法如下:

template< class InputIt, class UnaryPredicate >
bool is_partitioned( InputIt first, InputIt last, UnaryPredicate p );

其中,firstlast指定了需要判断的范围,p是一个一元谓词,用于判断元素是否满足分区条件。

函数返回一个bool类型值,表示指定范围是否满足分区条件。

例如,判断一个数组中是否所有正数都在负数前面:

#include <algorithm>
#include <iostream>

int main()
{
    int arr[] = {1, -3, 2, -5, 4, -7};
    auto n = std::end(arr) - std::begin(arr);
    auto is_positive = [](int x) { return x > 0; };
    bool is_partitioned = std::is_partitioned(arr, arr+n, is_positive);
    if (is_partitioned) {
        std::cout << "All positive elements are before negative elements.\n";
    } else {
        std::cout << "Positive and negative elements are not partitioned.\n";
    }
}
2. 示例

下面演示另一个例子,判断一个字符串中是否所有大写字母都在小写字母前面。

#include <algorithm>
#include <iostream>
#include <string>

int main()
{
    std::string s = "ABcdEfGhIjKlmnopqrStUVwxyz";
    auto is_upper = [](char c) { return std::isupper(c); };
    bool is_partitioned = std::is_partitioned(s.begin(), s.end(), is_upper);
    if (is_partitioned) {
        std::cout << "All uppercase letters are before lowercase letters.\n";
    } else {
        std::cout << "Uppercase and lowercase letters are not partitioned.\n";
    }
}
3. 复杂度

is_partitioned的执行时间是O(N),其中N是指定范围的元素数量。