partition
Le classi degli elementi in un intervallo in due disgiunte set, con gli elementi che soddisfano il predicato unario che precede quelli che non vengono soddisfarlo.
template<class BidirectionalIterator, class Predicate>
BidirectionalIterator partition(
BidirectionalIterator _First,
BidirectionalIterator _Last,
Predicate _Comp
);
Parametri
_First
Un iteratore bidirezionale destinato alla posizione del primo elemento nell'intervallo partizione._Last
Un iteratore bidirezionale destinato alla posizione una dopo l'elemento finale nell'intervallo partizione._Comp
Oggetto definito dall'utente di funzione di predicato che definisce la condizione soddisfatta se un elemento deve essere specificato.Un predicato accetta un solo argomento e restituisce true o false.
Valore restituito
Un iteratore bidirezionale destinato alla posizione del primo elemento nell'intervallo per non soddisfare la condizione di predicato.
Note
l'intervallo fatto riferimento deve essere valido; tutti i puntatori devono essere dereferenceable e all'interno della sequenza dell'ultima posizione è raggiungibile da prima dall'aumento.
Gli elementi a e b sono equivalenti, ma non necessariamente a, se entrambe fotoricettore (a, *b)*è false e fotoricettore (b,) se false, dove il fotoricettore è parametro- il predicato specificato.L'algoritmo partition non diventa stabile e non garantisce che l'ordine degli elementi equivalenti verrà mantenuto.L'algoritmo stable_ partition conserva questo ordine originale.
Complessità è lineare: esistono_Last (–) _Firstapplicazioni _Comp e al massimo (_Last – _First) /2 di scambio.
Esempio
// 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;
}
Esempio di output
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 ).
Requisiti
intestazione: <algorithm>
Spazio dei nomi: deviazione standard