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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值