Condividi tramite


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

Vedere anche

Riferimenti

partition (STL Samples)

Libreria di modelli standard