template <class ForwardIterator, class UnaryPredicate> ForwardIterator partition (ForwardIterator first, ForwardIterator last, UnaryPredicate pred);
template <class ForwardIterator, class UnaryPredicate> ForwardIterator stable_partition (ForwardIterator first, ForwardIterator last, UnaryPredicate pred);
stable_partition是一个adpative算法,会试图分配内存缓冲区,其运行复杂度取决于缓冲区中有多少内存,最坏情况下没有分配任何内存,至多调用swap Nlog(N)次,N为last-first,最好情况下(缓冲区中有足够内存)与N呈线性关系,两种情况下pred都被调用N次
#include <iostream> #include <vector> #include <algorithm> #include <iterator> #include <functional> using namespace std; class F { public: bool operator()(int i) { return (i&1)==0; } }; int main() { vector<int> v{1,2,3,4,5,6}; auto it=stable_partition(v.begin(),v.end(),F()); for_each(v.begin(),v.end(),[](int i) { cout<<i<<" "; }); cout<<endl; return 0; }
原文:https://www.cnblogs.com/tianzeng/p/10386097.html