C++中的std::is_partitioned

C++中的std::is_partitioned

std::is_partitioned 用于查找区间 [first, last) 是否已分区。如果区间根据某个条件分成了两部分,使得所有满足该条件的元素都在不满足该条件的元素之前,则称该区间已被分区。

它定义在头文件中。如果要检查其是否已分区的区间为空,则此函数返回true。

语法:

bool is_partitioned (InputIterator first,
InputIterator last, UnaryPredicate pred);

first: 区间的第一个元素的输入迭代器。
last: 区间的最后一个元素的输入迭代器。
pred: 一元谓词,接受区间中的元素作为参数,并返回一个可转换为bool值的值。返回的值表示该元素是否属于第一组(如果为true,则该元素应在所有返回false的元素之前)。
该函数不应修改其参数。
此可以是函数指针或函数对象。

返回: 如果pred(指向迭代器的区间 [first,last)中的所有元素,使得pred返回true的元素都在它返回false的元素之前,则返回true。否则,返回false。
如果区间为空,则该函数返回true。

// C++程序演示了std::is_partitioned的用法
#include <iostream>
#include <algorithm>
#include <vector>
  
// 定义二进制函数
bool pred(int a)
{
    return (a % 3 == 0);
}
  
using namespace std;
int main()
{
    // 声明第一个向量
    vector<int> v1 = { 3, 6, 9, 10, 11, 13 };
  
    // 使用std::is_partitioned
    bool b = std::is_partitioned(v1.begin(), v1.end(), pred);
  
    if (b == 1) {
        cout << "它已分区了";
    } else {
        cout << "它没有被分区。";
    }
    return 0;
}  

输出:

它已分区了

解释: 在本程序中,首先我们将元素存储在一个向量中,然后我们检查是否所有可被3整除的元素都在不能被3整除的元素之前。由于该条件对于采用的向量返回true,因此此处返回值为1,因为它已被分区。

另一个例子

  • 检查所有奇数和偶数元素是否已分割
// C++程序演示std::is_partitioned的使用
#include<iostream>
#include<algorithm>
#include<vector>

// 定义二元函数
bool pred(int a)
{
    return (a % 2 == 0);
}

using namespace std;
int main()
{
    // 声明第一个向量
    vector<int> v1 = { 2, 4, 6, 3, 5, 7, 9 };

    // 使用std::is_partitioned
    bool b = std::is_partitioned(v1.begin(), v1.end(), pred);

    if (b == 1) {
        cout << "所有偶数都在奇数之前。";
    } else {
        cout << "不是所有的偶数都在奇数之前。";
    }

    // 在v1的末尾插入一个偶数
    // 因此,std::is_partitioned返回false
    v1.push_back(16);

    // 再次使用std::is_partitioned
    b = std::is_partitioned(v1.begin(), v1.end(), pred);

    if (b == 1) {
        cout << "\n所有偶数都在奇数之前。";
    } else {
        cout << "\n不是所有的偶数都在奇数之前。";
    }

    return 0;
}  

输出:

所有偶数都在奇数之前。
不是所有的偶数都在奇数之前。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程