stable_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 und behält die relative Reihenfolge der übereinstimmenden Elemente bei.
template<class BidirectionalIterator, class Predicate>
BidirectionalIterator stable_partition(
BidirectionalIterator _First,
BidirectionalIterator _Last,
Predicate _Pred
);
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._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 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 Algorithmus ist stable_ partition stabil und stellt sicher, dass die relative Reihenfolge der entsprechenden Elemente beibehalten wird.Der Algorithmus partition nicht immer erhalten 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