Condividi tramite


stable_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, conservare l'ordine degli elementi equivalenti.

template<class BidirectionalIterator, class Predicate>
   BidirectionalIterator stable_partition(
      BidirectionalIterator _First, 
      BidirectionalIterator _Last,
      Predicate _Pred
   );

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.

  • _Pred
    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 stable_ partition diventa stabile e garantisce che l'ordine degli elementi equivalenti verrà mantenuto.L'algoritmo partition non viene necessariamente mantenuta questo ordine originale.

Esempio

// 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;
}

Esempio di output

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.

Requisiti

intestazione: <algorithm>

Spazio dei nomi: deviazione standard

Vedere anche

Riferimenti

Libreria di modelli standard