Freigeben über


partition

Klassifiziert Elemente in einem Bereich in zwei disjunkte Sätze, wenn diese Elemente ein unäres Prädikat erfüllen, das die vorausgeht, die es nicht erfüllen können.

template<class BidirectionalIterator, class Predicate>
   BidirectionalIterator partition(
      BidirectionalIterator _First, 
      BidirectionalIterator _Last, 
      Predicate _Comp
   );

Parameter

  • _First
    Ein bidirektionaler Iterator, der die Position des ersten Elements im Bereich behandelt partitioniert werden.

  • _Last
    Ein bidirektionaler Iterator, der die Position eine hinter dem letzten Element im Bereich behandelt partitioniert werden.

  • _Comp
    Benutzerdefiniertes Prädikatfunktionsobjekt, das die erfüllt werden definiert, Bedingung, wenn ein Element klassifiziert werden soll.Ein Prädikat akzeptiert ein einzelnes Argument und gibt true oder false zurück.

Rückgabewert

Ein bidirektionaler Iterator, der die Position des ersten Elements im Bereich behandelt, die Prädikatzustand nicht zu erfüllen.

Hinweise

Der Bereich, der verweist, muss gültig sein; alle Zeiger müssen dereferenzierbar sein und in der Sequenz ist die letzte Position von der ersten durch Zunahme erreichbar.

Elemente a und b sind gleichwertig, aber nicht notwendigerweise entsprechen, wenn sowohl Fotorezeptor (A, B) ist falsch und Fotorezeptor (B, A) Wenn false, wo Fotorezeptor das Parameter-angegebene Prädikat ist.Der partition Algorithmus ist nicht stabil und garantiert nicht, dass die relative Reihenfolge der entsprechenden Elemente beibehalten wird.Der Algorithmus stable_ partition behält diese ursprüngliche Reihenfolge bei.

Die Komplexität kann linear: Es gibt _Last (- _First) Anwendungen von _Comp und höchstens (_Last - _First) /2 Austausch.

Beispiel

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

Beispielausgabe

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 ).

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

partition (STL Samples)

Standardvorlagenbibliothek