ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++ STL算法 is_partitioned(29)

2022-01-04 18:03:47  阅读:166  来源: 互联网

标签:std 函数 partitioned STL pred C++ int bool include


函数原型

template<class _InIt, class _Pr>
_NODISCARD inline bool is_partitioned(_InIt _First, _InIt _Last, _Pr _Pred)

测试范围内的元素是否是以pred为准则的一个划分。如果是,则返回true,否则返回false。

例如:T T T T F F F F或T T T或F F F或F F F T都算是一个划分。

但T F T或者F T F 就不是一个划分了。即满足pred的元素是否都在前面

参数

first, last 需要验证的函数范围

pred 自定义查找规则。该规则实际上是一个可包含 2 个参数且返回值类型为 bool 的函数(第一个参数接收 [first1, last1) 范围内的元素。函数定义的形式可以是普通函数,也可以是函数对象。

函数对象

#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
#include <string>
#include <iterator>
#include <array>

bool IsEven(int a)
{
	return a % 2 == 0;
}

int main()
{	
	std::array<int, 9> v ={ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	
	std::cout.setf(std::ios_base::boolalpha);
	std::for_each(std::begin(v), std::end(v), [](int a) {std::cout << a << ", "; });
	std::cout << std::endl;

	std::cout << std::is_partitioned(v.begin(), v.end(), IsEven) << ' ' << std::endl << std::endl;

	std::partition(v.begin(), v.end(), IsEven);
	std::cout << "partition 分割后" << std::endl;
	std::for_each(std::begin(v), std::end(v), [](int a) {std::cout << a << ", "; });
	std::cout << std::endl;
	std::cout << std::is_partitioned(v.begin(), v.end(), IsEven) << ' ' << std::endl << std::endl;

	std::reverse(v.begin(), v.end());
	std::cout << "reverse 反序后" << std::endl;
	std::for_each(std::begin(v), std::end(v), [](int a) {std::cout << a << ", "; });
	std::cout << std::endl;
	std::cout << std::is_partitioned(v.cbegin(), v.cend(), IsEven) << ' ' << std::endl << std::endl;
	std::cout << std::is_partitioned(v.crbegin(), v.crend(), IsEven) << '\n';

	return -1;
}

1, 2, 3, 4, 5, 6, 7, 8, 9,
false

partition 分割后
8, 2, 6, 4, 5, 3, 7, 1, 9, //所有偶数在前面
true

reverse 反序后
9, 1, 7, 3, 5, 4, 6, 2, 8,
false

true

标签:std,函数,partitioned,STL,pred,C++,int,bool,include
来源: https://blog.csdn.net/qq_30460949/article/details/122299676

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有