Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Classifica os elementos em um intervalo em separam dois conjuntos, com elementos que satisfazem um predicado unário que precede aqueles que não o conteúdo.
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 dividido._Last
Um iterador bidirecional que trata a posição uma após o elemento final no intervalo ser dividido._Comp
Objeto definido pelo usuário da função de predicado que define a condição seja satisfeita se um elemento deve ser classificados.Um predicado aceita um argumento único 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 seqüência a posição da última é alcançável de primeira por incrementação.
Elementos a e b são equivalentes, mas não necessariamente são iguais, se ambos fotorreceptor (a, *b)*é falso e o fotorreceptor (b, *a)*se falso, onde o fotorreceptor é o predicado parâmetro- especificado.O algoritmo de partition não é estável e não garante que pede relativo dos elementos equivalentes será preservada.O algoritmo stable_ partition esta ordenação preserva original.
Complexidade é linear: há_Last (–) _Firstum aplicativos de _Comp e no máximo_Last (–) _Firstalternam /2.
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;
}
A 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: <algorithm>
namespace: STD