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