template<classInputIt,classUnaryPredicate>boolis_partitioned( InputIt first, InputIt last, UnaryPredicate p );(1)(C++11 起)(C++20 前)template<classInputIt,classUnaryPredicate>constexprboolis_partitioned( InputIt first, InputIt last,
UnaryPredicate p );(1)(C++20 起)template<classExecutionPolicy,classForwardIt,classUnaryPredicate>boolis_partitioned( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
UnaryPredicate p );(2)(C++17 起)
四 std::partition_point(C++11)
返回已分割区间的分割点
定义
template<classForwardIt,classUnaryPredicate>
ForwardIt partition_point( ForwardIt first, ForwardIt last,
UnaryPredicate p );(C++11 起)(C++20 前)template<classForwardIt,classUnaryPredicate>constexpr ForwardIt partition_point( ForwardIt first, ForwardIt last,
UnaryPredicate p );(C++20 起)
五 Demo
std::vector<int> vc1{1,3,5,2,4,6};
std::vector<int> vc2{2,4,6,1,3,5};
std::vector<int> vc3;
std::vector<int> vc4{2,4,6,8};;fill(vc3,1,6);print("vc1: ", vc1);print("vc2: ", vc2);print("vc3: ", vc3);print("vc3: ", vc4);// std::is_partitioned(C++11)
std::cout <<"vc1 is "<<(std::is_partitioned(vc1.begin(), vc1.end(), even)?"":"not ")<<"partitioned"<< std::endl;
std::cout <<"vc2 is "<<(std::is_partitioned(vc2.begin(), vc2.end(), even)?"":"not ")<<"partitioned"<< std::endl;
std::cout <<"vc3 is "<<(std::is_partitioned(vc3.begin(), vc3.end(), even)?"":"not ")<<"partitioned"<< std::endl;
std::cout <<"vc4 is "<<(std::is_partitioned(vc4.begin(), vc4.end(), even)?"":"not ")<<"partitioned"<< std::endl;// std::partition_point(C++11)auto it1 = std::partition_point(vc1.begin(), vc1.end(), even);
std::cout <<"vc1: the No."<< std::distance(vc1.begin(), it1)<<" is partition_point "<< std::endl;auto it2 = std::partition_point(vc2.begin(), vc2.end(), even);
std::cout <<"vc2: the No."<< std::distance(vc2.begin(), it2)<<" is partition_point"<< std::endl;auto it3 = std::partition_point(vc3.begin(), vc3.end(), even);
std::cout <<"vc3: the No."<< std::distance(vc3.begin(), it3)<<" is partition_point"<< std::endl;auto it4 = std::partition_point(vc4.begin(), vc4.end(), even);
std::cout <<"vc4: the No."<< std::distance(vc4.begin(), it4)<<" is partition_point "<< std::endl;
结果
vc1:135246
vc2:246135
vc3:123456
vc3:2468
vc1 is not partitioned // 结果 1
vc2 is partitioned // 结果 1
vc3 is not partitioned
vc4 is partitioned
vc1: the No.6 is partition_point // 结果 2
vc2: the No.3 is partition_point
vc3: the No.6 is partition_point // 结果 2
vc4: the No.4 is partition_point // 结果 3