欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

关于C++primer第十章出现的所有算法

时间:2023-05-27

***这些算法的内部都是利用元素类型的<或者是==

只读算法:(在只读算法中最好使用cbegin()和cend()而不是begin()和end()) 操作一个序列的只读算法:

find:

find(c.cbegin() , c.cend() , val);

参数:第一、二参数是元素范围的输入迭代器,第三参数是一个值

返回值:指向第一个等于给定值的迭代器

count:

count( c.cbegin() , c.cend() , val);

参数: 第一、二参数是元素范围的输入迭代器,第三参数是一个值

返回值:序列中给定值出现的次数

accumulate:

accumulate( c.cbegin(), c.cend(), val);

参数:第一、二参数是元素范围的输入迭代器,第三参数是一个值(初始值)

初始值:决定了加法运算符的重载和返回值的类型【例如初始值是一个石头】

返回值:给定范围的所有元素的和加上初始值

操作两个序列的只读算法: equal:

equal( c1.cbegin() , c1.cend() , c2.cbegin());

参数: 第一、二参数是元素范围的输入迭代器,第三参数是第二个容器的首元素的输入迭代器

返回值:一个bool值,确定是否相等

note1:两个序列类型可以不相同,元素类型只要可以相互转换即可

note2:默认的是两个序列的大小相等,否则会出错,他会试图访问不存在的元素。

因为操作两个序列的算法一共有两种版本(区别在于如何传第二个序列):

1.一共给四个输入迭代器,前两个是第一个序列的元素范围,后两个是第二个序列的元素范围。

2.给三个输入迭代器,此时两个序列是否相等就需要自己保证了。

==============================================================================================

重写容器元素的算法: fill:

fill(c.begin() , c.end() , val); //将给定范围的序列的每个元素重置为val

参数: 第一、二参数是元素范围的输入迭代器,第三参数是一个值

返回值:没说,看了源码是void

fill_n:

fill(c.begin() , c.size() , val);

参数: 第一是元素输入迭代器,第二个参数是序列的大小,第三参数是一个值

note:也必须保证到n是有效的【这种给一个迭代器的都要自己保证】

copy(与插入迭代器搭配可以做到插入元素的作用): 

copy( c1.begin() , c1.end() , c2.begin());

参数: 第一、二参数是元素范围的输入迭代器,第三参数是接受拷贝的容器的首元素的迭代器

返回值:目的位置迭代器(递增后)的值

note:第一个和第二个序列的大小必须相同,而且两个序列必须有值而不是只分配了内存是空的

(因为泛型算法是不能做到插入和删除的)

replace:

replace(c.begin() ,c.end() , 0 , 42); //将中所有为0的值改成42

参数: 第一、二参数是元素范围的输入迭代器,第三参数是目的值,第四修改值

replace_copy:

replace_copy( c1.begin() , c1.end() , back_inserter(c2) , 0 , 42);//原序列不变,变的是c2

参数: 第一、二参数是元素范围的输入迭代器,第三插入迭代器,第四参数是目的值,第五修改值

重排容器元素的算法: sort:

sort(c.begin() , c.end());

按照元素类型的<进行排序

unique:

unique( c.begin() , c.end());

将相邻重复项消除,返回最后一个不重复元素之后的位置。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。