C++泛型算法之 sort() stable_sort() unique() count_if()

首先我们定义要用到的vector:vector<string> words;  

words中存储十个元素分别是一下十个单词: the quick red fox jumps over the slow red turtle

sort 算法:带有两个迭代器实参,之处要排序的元素范围,使用小于(<)操作符比较元素。

sort(words.begin(), words.end());
排序后结果:

fox jumps over quick red red slow the the turtle
unique算法:使用unique之前最好调用sort函数进行排序。unique算法带有两个指定迭代器范围的参数。改算法“删除”相邻的重复元素,然后重新排列输入范围内的元素。给“删除”加上引号因为unique实际上并没有删除任何元素,而是将无重复的元素复制到序列的前端,从而覆盖相邻的重复元素。unique返回的迭代器指向超出无重复元素范围末端的下一位置。

vector<string> end_unique = unique(words.begin(), words.end());
调用unique后vector存储的内容变为:其中返回结果迭代器 指向turtle的下一个位置,表示无重复范围结束。

for jumps over quick red slow the turtle red the
由于 算法不直接修改容器大小,如果需要添加或删除元素,则必须使用容器操作。
可以利用erase删除words中重复元素:

words.erase(end_unique, words.end());
调用erase结果:

fox jumps over quick red slow the turtle
stable_sort算法:比sort算法多一个形参,比较函数所使用的谓词函数名字。排序后保留相等元素的原始相对位置。

比如对words中现有元素按照长度大小进行排序:

bool isShorter(const string &s1, const &s2)
{
return s1.size() < s2.size();
}
stable_sort(words.begin(), words.end(), isShorter);
调用stable_sort后,words元素按照长度大小排序,且相同长度的单词仍按照保持原来顺序:

fox red the over slow jumps quick turtle
count_if算法:统计迭代器范围内满足谓词函数条件的元素个数。

对words中长度不小于6的单词个数统计:

bool GT6(const string &s)
{
return s.size() >= 6;
}
vector<string>::size_type wc = count_if(words.begin(), words.end(), GT6);
返回结果:

1



你可能感兴趣的:(C++泛型算法之 sort() stable_sort() unique() count_if())