先看代码,再解释函数的作用

       

bool Fun(char c)
{
return c=='*';
}


int main()
{
string str = "***b**a**c**d**";
string str1(str);
string str2(str);
std::partition(std::begin(str1), std::end(str1),
Fun);
std::stable_partition(std::begin(str2), std::end(str2),
Fun);

cout<<"str1="<<str1.c_str()<<endl;
cout<<"str2="<<str2.c_str()<<endl;
return 1;
}


运行结果:

STL之partition和stable_partition_o


从运行结果上看,partition函数把所有的*都提前了,但是其他字母的顺序是打乱的,而stable_partition函数除了把*号提前,其他字母的顺序和原来是一样的

Fun函数判断传入的char是不是*,如果是,就返回true

stable_partition 函数,前两个参数规定了排序的范围,最后一个参数要传入一个函数名,程序会遍历规定范围内的元素并传入Fun函数,根据返回值决定这个元素是往前放还是往后放