A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://en.cppreference.com/w/cpp/language/../error/error_code/../../algorithm/is_partitioned.html below:

std::is_partitioned - cppreference.com

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 predicate p: all elements satisfy p appear before all elements that do not.

2) Same as (1), but executed according to policy.

This overload participates in overload resolution only if all following conditions are satisfied:

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

The expression p(v) must be convertible to bool for every argument v of type (possibly const) VT, where VT is the value type of InputIt, regardless of value category, and must not modify v. Thus, a parameter type of VT&is not allowed, nor is VT unless for VT a move is equivalent to a copy(since C++11). ​

Type requirements -InputIt must meet the requirements of LegacyInputIterator. -ForwardIt must meet the requirements of LegacyForwardIterator. and its value type must be convertible to UnaryPred's parameter type. -UnaryPred must meet the requirements of Predicate. [edit] Return value

true if the elements e of [firstlast) are partitioned with respect to the expression p(e). false otherwise.

[edit] Complexity

At most std::distance(first, last) applications of p.

[edit] Exceptions

The overload with a template parameter named ExecutionPolicy reports errors as follows:

[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))
            return false;
    return true;
}
[edit] Example
#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:

[edit] See also

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4