◐ Shell
clean mode source ↗

std::is_partitioned - cppreference.com

De cppreference.com

<metanoindex/>

<tbody> </tbody>

Definido no cabeçalho

<algorithm>

template< class InputIt, class UnaryPredicate > bool is_partitioned( InputIt first, InputIt last, UnaryPredicate p );

(desde C++11)

Retorna true se todos os elementos da [first, last) intervalo que satisfazem o predicado p comparecer perante todos os elementos que não. Também retorna true se [first, last) está vazia.

Original:

Returns true if all elements in the range [first, last) that satisfy the predicate p appear before all elements that don't. Also returns true if [first, last) is empty.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Parâmetros

first, last -

a gama de elementos para verificar

Original:

the range of elements to check

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

p - unary predicate which returns ​true

para os elementos que se espera encontrar no início do intervalo

Original:

for the elements expected to be found in the beginning of the range

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

.

The signature of the predicate function should be equivalent to the following:

bool pred(const Type &a);

The signature does not need to have const &, but the function must not modify the objects passed to it.
The type Type must be such that an object of type InputIt can be dereferenced and then implicitly converted to Type. ​

Type requirements
-InputIt must meet the requirements of InputIterator.

Valor de retorno

true se o [first, last) gama está vazio ou é particionado p. false de outra forma.

Original:

true if the range [first, last) is empty or is partitioned by p. false otherwise.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Complexidade

Na maioria das aplicações de std::distance(first, last) de p.

Original:

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

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Possível implementação

template< class InputIt, class UnaryPredicate >
bool is_partitioned(InputIt first, InputIt last, UnaryPredicate p)
{
    for (; first != last; ++first)
        if (!p(*first))
            break;
    for (; first != last; ++first)
        if (p(*first))
            return false;
    return true;
}

Exemplo

#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.begin(), v.end(), is_even);
}

Saída:

Veja também

divide um intervalo de elementos em dois grupos

Original:

divides a range of elements into two groups

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(modelo de função) [edit]
locates the partition point of a partitioned range
(modelo de função) [edit]