c++prime重学(三)基于第四版

本文深入探讨了C++中泛型算法的使用,包括查找、容器元素操作、排序、去重、替换和写入容器元素等常用算法。通过具体示例,展示了如何灵活运用这些算法解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型算法:可作用字不同类型的容器和不同类型的元素上。

每个算法都需要使用(至少)两个迭代器来指出该算法操纵的元素范围,第一个迭代器

指向第一个元素,而第二个迭代器则指向最后一个元素的下一位置。第二个迭代器所指向

的元素[有时被称为超出末端迭代器]本身不是要操作的元素,而被用做终止遍历的哨兵。

使用泛型算法必须包含头文件:

#include<algorithm>

#include<numeric>

简单查找算法:

find(beg,end,val)算法返回引用第一个匹配元素的迭代器

count(beg,end,val)算法返回元素在输入序列中出现次数的计数。

写容器元素算法:使用这些算法写元素师要当心,必须确保算法所写的序列至少足以存储要写入的元素。

fill(beg,end,val)在有效的输入范围内,写入val值

copy算法:

ilst是一个存放int型数据的list对象,可如下将它copy给一个vector对象

vector<int> ivec;
copy(ilst.begin(),ilist.end(),back_inserter(ivec));
上面等价于:

vector<int>ivec(ilst.begin().ilst.end());

replace算法:

这个调用将所有的值为0的实例替换成42

replace(ilst.begin(),ilist.end(),0,42);

sort算法:

对vector对象的元素按次序排列

sort(words.begin(),words.end());  
unique算法:

该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器,表示无重复的的值范围的结束。

unique实际上并咩有删除任何元素,而是将无重复的元素复制到序列的前端,从而覆盖相邻的重复元素。unique返回的

迭代器指向超出无重复的元素范围末端范围末端的下一个位置。

vector<string>::iterator end_unique=unique(words.begin(),words.end());

erase算法:

这个函数调用从end_unique指向的元素开始删除,直到words的最后一个元素也删掉为止。

words.erase(end_unique,words.end());

谓词:

//指出第一个字符串是否比第二个短
bool isShorter(const string &s1,const string &s2)
{
      return s1.size()<s2.size();
}
//判断给出的string对象的长度是否不小于6
bool GT6(const string &s)
{
    return s.size()>=6;
}


stable_sort算法:

这个函数调用后,words中的元素按长度大小排序,而长度相同的单词则仍然保持字典顺序。

stable_sort(words.begin(),word.end(),isShorter)

count_if算法:

执行count_if时,首先读取它的头两个实参所标记的范围内的元素,每读出一个元素,就将它传递给第三个实参表示的谓词函数。

vector<string>::size_type wc=count_if(words.begin(),words.end(),GT6);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值