栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

只读算法:(在只读算法中最好使用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());

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739041.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号