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

来源:互联网 发布:原生js实现分页效果 编辑:程序博客网 时间:2024/05/29 18:16

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

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

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

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

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

#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对象的长度是否不小于6bool 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);


0 0
原创粉丝点击