C++ STL is_partitioned 用法和实现

一:功能

        检查一个序列是否已按条件分组,第二个参数指定了分组的条件

二:用法

#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> data{2, 4, 6, 7, 9, 11};

    auto is_even = [](int v) { return v % 2 == 0; };
    bool test1 = std::ranges::is_partitioned(data, is_even);
    std::cout << std::boolalpha << "is_partitioned(is_even) == " << test1 << "\n";

    bool test2 = true;
    for (int i = 0; i < 16; ++i) {
        test2 = test2 && std::is_partitioned(data.begin(), data.end(),
            [&i](int v) { return v < i; });
    }
    std::cout << std::boolalpha << "is_sorted() == " << test2 << "\n";
}

三:实现 

#include <vector>
#include <algorithm>
#include <array>
#include <iostream>
 
template<class InputIt, class UnaryPred>
bool my_is_partitioned(InputIt first, InputIt last, UnaryPred p)
{
    for (; first != last; ++first)
        if (!p(*first))
            break;
    for (; first != last; ++first)
        if (p(*first))
            return false;
    return true;
}


int main()
{
    std::array<int, 9> v {1, 2, 3, 4, 5, 6, 7, 8, 9};
 
    auto is_even = [](int i) { return i % 2 == 0; };
    std::cout.setf(std::ios_base::boolalpha);
    std::cout << my_is_partitioned(v.begin(), v.end(), is_even) << ' ';
 
    std::partition(v.begin(), v.end(), is_even);
    std::cout << my_is_partitioned(v.begin(), v.end(), is_even) << ' ';
 
    std::reverse(v.begin(), v.end());
    std::cout << my_is_partitioned(v.cbegin(), v.cend(), is_even) << ' ';
    std::cout << my_is_partitioned(v.crbegin(), v.crend(), is_even) << '\n';
}

相关推荐

  1. C++ STL is_partitioned 实现

    2024-07-20 02:26:05       16 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 02:26:05       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 02:26:05       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 02:26:05       45 阅读
  4. Python语言-面向对象

    2024-07-20 02:26:05       55 阅读

热门阅读

  1. Python基础学习Day_06

    2024-07-20 02:26:05       16 阅读
  2. android SpannableStringBuilder span 设置点击事件

    2024-07-20 02:26:05       16 阅读
  3. 牛客算法入门01

    2024-07-20 02:26:05       13 阅读
  4. Webpack基础学习-Day01

    2024-07-20 02:26:05       14 阅读
  5. Git技巧:如何重命名你的分支

    2024-07-20 02:26:05       15 阅读
  6. RocketMQ

    RocketMQ

    2024-07-20 02:26:05      16 阅读
  7. 请求头中的Cookie和Referer(学习笔记)

    2024-07-20 02:26:05       17 阅读
  8. 麻醉病人的护理

    2024-07-20 02:26:05       13 阅读
  9. 比较HTTP/1.1、HTTP/2

    2024-07-20 02:26:05       17 阅读
  10. oracle decode 使用if else

    2024-07-20 02:26:05       16 阅读