"partition"和“stable_partition”的思考

来源:互联网 发布:苹果cms模板怎么用 编辑:程序博客网 时间:2024/05/17 21:58

"partition"和“stable_partition”设计的目的是根据一个谓词而把容器分为两部分。可是他们具体的区别在哪里呢?下面我们来验证一下。

void elimDups(vector<string> &words){    sort(words.begin(), words.end());    auto it = unique(words.begin(),words.end());    words.erase(it, words.end());    for(auto &a : words) cout << a << " ";    cout << endl;}void bigies_partition(vector<string> &words, std::size_t sz){    elimDups(words);    auto pivot = partition(words.begin(),words.end(),                           [sz](const string &a){return a.size() < sz;});    for(auto a = words.begin(); a != pivot; ++a){        cout << *a << " ";    }}void bigies_stable_partition(vector<string> &words, std::size_t sz){    elimDups(words);    auto pivot = stable_partition(words.begin(),words.end(),                           [sz](const string &a){return a.size() < sz;});    for(auto a = words.begin(); a != pivot; ++a){        cout << *a << " ";    }}int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    vector<string> v{"aa", "c", "ffff","bb","dddddd","eee","aaa","bbb"};    vector<string> v1(v);    cout << "partition:" << endl;    bigies_partition(v1,3);    cout << endl;    vector<string> v2(v);    cout << "stable_partition:" << endl;    bigies_stable_partition(v2,3);    cout << endl;    return a.exec();}

output:

partitionaa aaa bb bbb c dddddd eee ffffaa c bbstable_partitionaa aaa bb bbb c dddddd eee ffffaa bb c

可以发现,stable_partition除了根据谓词把容器划分为两部分,还可以保持容器原有元素的顺序。

0 0