Freigeben über


stable_partition

Klassifiziert Elemente in einem Bereich in disjunkte zwei Sätze, wenn diese Elemente kein unäres Prädikat erfüllen, das die direkt vorausgeht, die es nicht erfüllen können und behält die relative Position von entsprechenden Arbeitsaufgaben beibehalten.

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

Parameter

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

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

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

Rückgabewert

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

Hinweise

Der Bereich, auf den verwiesen wird, gültig sein; muss alle Zeiger müssen dereferenzierbar befinden der Sequenz ist die letzte Position der ersten von Zunahme erreichbar.

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

Beispiel

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

Beispielausgabe

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.

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

Standardvorlagenbibliothek