partition
Bir aralıktaki öğeleri iki ayrık kümeler onu karşılamak için başarısız olmuş önceki tekli yüklemi karşılanması bu öğelerle sınıflandırır.
template<class BidirectionalIterator, class Predicate>
BidirectionalIterator partition(
BidirectionalIterator _First,
BidirectionalIterator _Last,
Predicate _Comp
);
Parametreler
_First
Bölümlenmiş aralığındaki ilk öğenin konumunu adresleme bir çift yönlü Yineleyici._Last
Bölümlenmiş geçen aralıktaki son öğenin konumunu adresleme bir çift yönlü Yineleyici._Comp
Bir öğe sınıflandırılmalarını ise yerine getirilmesi koşulu tanımlar doðrulama işlevi kullanıcı tanımlı nesne.Bir yüklemi tek bir baðýmsýz deðiþken alýr ve döner doğru veya yanlış.
Dönüş Değeri
Doðrulama koşul değil karşılamak için aralıktaki ilk öğenin konumunu adresleme bir çift yönlü Yineleyici.
Notlar
Başvurulan aralığı geçerli olması gerekir; Tüm işaretçiler dereferenceable ve sıra içinde son konuma birinciden erişilebildiğinden tarafından incrementation.
Öğeleri bir ve b eşdeğerdir ancak şart değil, her iki eşit Pr (bir, b) yanlış ve Pr (b, bir) yanlışsa, burada Pr parametresi tarafından belirtilen yüklemi olur.Bölüm algoritması kararlı değil ve göreli eşdeğer öğelerinin sıralamasını korunacaktır olduğunu garanti etmez.Algoritma stable_ bölüm orijinal sipariş koru.
Doğrusal karmaşıklık: vardır (_Last – _First) uygulamaları _Comp ve en fazla (_Last – _First) / 2 ile değiştirir.
Örnek
// 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;
}
Örnek Çıktı
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 ).
Gereksinimler
Başlık: <algorithm>
Namespace: std