📅  最后修改于: 2023-12-03 14:59:50.766000             🧑  作者: Mango
在C++的STL中,有一个is_partitioned函数,该函数用于判断指定的范围是否满足指定的分区条件。
is_partitioned的基本用法如下:
template< class InputIt, class UnaryPredicate >
bool is_partitioned( InputIt first, InputIt last, UnaryPredicate p );
其中,first
和last
指定了需要判断的范围,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";
}
}
下面演示另一个例子,判断一个字符串中是否所有大写字母都在小写字母前面。
#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";
}
}
is_partitioned的执行时间是O(N),其中N是指定范围的元素数量。