Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Classifica os elementos em um intervalo separam em dois conjuntos, com os elementos que satisfazem um predicado unário que precede os que não satisfazem o.
template<class BidirectionalIterator, class Predicate>
BidirectionalIterator partition(
BidirectionalIterator _First,
BidirectionalIterator _Last,
Predicate _Comp
);
Parâmetros
_First
Um iterador bidirecional que trata a posição do primeiro elemento no intervalo ser dividida._Last
Um iterador bidirecional que trata a posição uma depois do elemento final no intervalo ser dividida._Comp
Objeto definido pelo usuário da função de predicado que define a condição a ser atendido se um elemento deve ser classificada. Um predicado usa um único argumento e retorna true ou false.
Valor de retorno
Um iterador bidirecional que trata a posição do primeiro elemento no intervalo não satisfazer a condição de predicado.
Comentários
O intervalo referenciado deve ser válido; todos os ponteiros devem ser dereferenceable e na sequência última posição da primeira é possível acessá-lo pela incrementação.
Os elementos a e b são equivalentes, mas não são necessariamente iguais, se Pr (a, b) é false e Pr (b, a) se false, onde Pr é o predicado de parâmetros especificado. O algoritmo de partition não for estável e não garante que a ordenação relativa dos elementos equivalentes será preservado. O algoritmo stable_ partition preserva esse ordenar original.
A complexidade é linear: há_Last (–)_Firstaplicativo de _Comp e máximo_Last (–)/2_Firstde troca.
Exemplo
// alg_partition.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>
bool greater5 ( int value ) {
return value >5;
}
int main( ) {
using namespace std;
vector <int> v1, v2;
vector <int>::iterator Iter1, Iter2;
int i;
for ( i = 0 ; i <= 10 ; i++ )
{
v1.push_back( i );
}
random_shuffle( v1.begin( ), v1.end( ) );
cout << "Vector v1 is ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Partition the range with predicate greater10
partition ( v1.begin( ), v1.end( ), greater5 );
cout << "The partitioned set of elements in v1 is: ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
}
Saída de Exemplo
Vector v1 is ( 10 1 9 2 0 5 7 3 4 6 8 ).
The partitioned set of elements in v1 is: ( 10 8 9 6 7 5 0 3 4 2 1 ).
Requisitos
Cabeçalho: <algoritmo>
Namespace: std