首先我们定义要用到的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 turtleunique算法:使用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由于 算法不直接修改容器大小,如果需要添加或删除元素,则必须使用容器操作。
words.erase(end_unique, words.end());调用erase结果:
fox jumps over quick red slow the turtlestable_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 turtlecount_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