这次介绍Algorithm中的算法按用法分类分别有:
- 检查序列中元素属性的算法
- 计算序列中有指定属性的元素个数的算法
- 比较两个序列中元素的算法
- 用来复制或移动序列的算法
- 设置或改变序列中元素的算法
一、检查元素的属性
- all_of() 算法会返回true,前提是序列中的所有元素都可以使谓词(一般用Lambad表达式来实现)返回true
- any_of() 算法会返回true,前提是序列中的任意一个元素都可以使谓词返回true
- none_of() 算法会返回true,前提是序列中没有元素可以使谓词返回true
使用样例:
vector<int> A = {5,5,6,7,4,8,2};
cout<<all_of(std::begin(A),std::end(A),
[](int i){return i > 1;})<<endl; // print 1
二、序列的比较
equal() 有四个重载版本,其中两个是用==来比较的,另外两个是使用我我们所传入的函数对象参数来比较元素的
- Edition1 : equal( iter1, end_iter1, iter2) //长度相等,并且对应的元素都相等则返回true,如果第一个序列长度长于第二个序列则结果未定义
- Edition1 : equal( iter1, end_iter1, iter2 end _iter2) //长度相等,并且对应的元素都相等则返回true,否则结果总为false
- Edition1 : equal( iter1, end_iter1, iter2, Funobj ) //使用Funobj定义的方法比较
- Edition1 : equal( iter1, end_iter1, iter2 end _iter2, Funobj ) //使用Funobj定义的方法比较
使用样例:
/*
在笔者编译器中好像并没有四个参数的版本
并且三参数版本,第一个序列长度长于第二个序列则结果为false
原因就不深究了
*/
vector<int> A = {5,5,6,7,4,8,2};
vector<int> B = {5,5,6,7,4,8,2};
std::cout<<std::equal(std::begin(A),std::end(A) , std::begin(B))<<std::endl;// print 1
三、查找序列的不同之处
mismatch()
四、按字典序比较序列
lexicographical_compare()
五、序列的排列
next_permutation()
六、复制序列
copy_n()
copy_if()
reverse_copy()
unique_copy()
七、从序列中移除相邻的重复元素
unique()
八、旋转序列
rotate()
九、移动序列
move()
十、从序列中移除元素
remove()
remove_copy()
remove_if()
remove_ copy_if()
十一、设置和修改序列中的元素
fill()
fill_n()