Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::is_partitioned

      From cppreference.com
      <cpp‎ |algorithm
       
       
      Algorithm library
      Constrained algorithms and algorithms on ranges(C++20)
      Constrained algorithms, e.g.ranges::copy,ranges::sort, ...
      Execution policies(C++17)
      Sorting and related operations
      Partitioning operations
      is_partitioned
      (C++11)

      Sorting operations
      Binary search operations
      (on partitioned ranges)
      Set operations (on sorted ranges)
      Merge operations (on sorted ranges)
      Heap operations
      Minimum/maximum operations
      (C++11)
      (C++17)
      Lexicographical comparison operations
      Permutation operations
      C library
      Numeric operations
      Operations on uninitialized memory
       
      Defined in header<algorithm>
      template<class InputIt,class UnaryPred>
      bool is_partitioned( InputIt first, InputIt last, UnaryPred p);
      (1)(since C++11)
      (constexpr since C++20)
      template<class ExecutionPolicy,class ForwardIt,class UnaryPred>

      bool is_partitioned( ExecutionPolicy&& policy,

                           ForwardIt first, ForwardIt last, UnaryPred p);
      (2)(since C++17)
      1) Checks whether[firstlast) is partitioned by the predicatep: all elements satisfyp appear before all elements that do not.
      2) Same as(1), but executed according topolicy.
      This overload participates in overload resolution only if all following conditions are satisfied:

      std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> istrue.

      (until C++20)

      std::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> istrue.

      (since C++20)

      Contents

      [edit]Parameters

      first, last - the pair of iterators defining therange of elements to examine
      policy - theexecution policy to use
      p - unary predicate which returns ​true for the elements expected to be found in the beginning of the range.

      The expressionp(v) must be convertible tobool for every argumentv of type (possibly const)VT, whereVT is the value type ofInputIt, regardless ofvalue category, and must not modifyv. Thus, a parameter type ofVT&is not allowed, nor isVT unless forVT a move is equivalent to a copy(since C++11).​

      Type requirements
      -
      InputIt must meet the requirements ofLegacyInputIterator.
      -
      ForwardIt must meet the requirements ofLegacyForwardIterator. and its value type must be convertible toUnaryPred's parameter type.
      -
      UnaryPred must meet the requirements ofPredicate.

      [edit]Return value

      true if the elementse of[firstlast) arepartitioned with respect to the expressionp(e).false otherwise.

      [edit]Complexity

      At moststd::distance(first, last) applications ofp.

      [edit]Exceptions

      The overload with a template parameter namedExecutionPolicy reports errors as follows:

      • If execution of a function invoked as part of the algorithm throws an exception andExecutionPolicy is one of thestandard policies,std::terminate is called. For any otherExecutionPolicy, the behavior is implementation-defined.
      • If the algorithm fails to allocate memory,std::bad_alloc is thrown.

      [edit]Possible implementation

      template<class InputIt,class UnaryPred>bool is_partitioned(InputIt first, InputIt last, UnaryPred p){for(; first!= last;++first)if(!p(*first))break;for(; first!= last;++first)if(p(*first))returnfalse;returntrue;}

      [edit]Example

      Run this code
      #include <algorithm>#include <array>#include <iostream> 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<< std::is_partitioned(v.begin(), v.end(), is_even)<<' '; std::partition(v.begin(), v.end(), is_even);std::cout<< std::is_partitioned(v.begin(), v.end(), is_even)<<' '; std::reverse(v.begin(), v.end());std::cout<< std::is_partitioned(v.cbegin(), v.cend(), is_even)<<' ';std::cout<< std::is_partitioned(v.crbegin(), v.crend(), is_even)<<'\n';}

      Output:

      false true false true

      [edit]See also

      divides a range of elements into two groups
      (function template)[edit]
      locates the partition point of a partitioned range
      (function template)[edit]
      determines if the range is partitioned by the given predicate
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/is_partitioned&oldid=180528"

      [8]ページ先頭

      ©2009-2025 Movatter.jp