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, preservando a ordem relativo de elementos equivalentes.
template<class BidirectionalIterator, class Predicate>
BidirectionalIterator stable_partition(
BidirectionalIterator _First,
BidirectionalIterator _Last,
Predicate _Pred
);
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._Pred
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 leva o ú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 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 stable_ partition é estável e garante que pede relativo dos elementos equivalentes será preservada.O algoritmo partition não necessariamente preserva este pedido original.
Exemplo
// alg_stable_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, result;
int i;
for ( i = 0 ; i <= 10 ; i++ )
v1.push_back( i );
int ii;
for ( ii = 0 ; ii <= 4 ; ii++ )
v1.push_back( 5 );
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
result = stable_partition (v1.begin( ), v1.end( ), greater5 );
cout << "The partitioned set of elements in v1 is:\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
cout << "The first element in v1 to fail to satisfy the"
<< "\n predicate greater5 is: " << *result << "." << endl;
}
A saída de exemplo
Vector v1 is ( 5 1 9 2 0 5 7 3 4 5 8 5 5 5 10 6 ).
The partitioned set of elements in v1 is:
( 9 7 8 10 6 5 1 2 0 5 3 4 5 5 5 5 ).
The first element in v1 to fail to satisfy the
predicate greater5 is: 5.
Requisitos
Cabeçalho: <algorithm>
namespace: STD