2016/12/08C++Primer学习笔记:第十章 泛型算法
2016-12-08 21:24
197 查看
标准库提供了一些经典算法的公共接口,如搜索和排序,它们可用于不同类型的元素和多种容器类型。
10.1概述
大多数算法都定义再头文件algorithm中。
find(vec.cbegin(),vec.cend(),val),寻找两个迭代器之间的所有元素中与val第一个相等的值,并返回指向这个元素的迭代器。
10.2
10.2.1只读算法
accumulate()接受三个参数,前两个位需要求和的元素的范围,第三个为和的初值。
其中有个假定,元素类型要有对应的“+”操作如:
string sum=accumulate(v.cbegin(),v.cend(),string(“”))
此条语句会将v中的所有string元素连接起来并赋值给sum;
10.2.2写容器元素的算法
算法不能改变容器大小
如:
fill()接受三个参数,前两个为元素范围,第三个为元素值,此函数将范围内的所有元素替换为第三个参数的元素值
算法不检查写操作
fill_n(vec.begin(),vec.size(),0);//将所有元素置为0
错误:fill_n(vec.begin(),10,0);//vec本来是空的,也就是说fill_n不检查容器大小是否足够
插入迭代器:将一个新的元素插入到容器中
back_inserter()
例:auto it=back_inserter(vec);
*it=42;
在此例中我们能通过it将值42插入到容器中,等同于调用push_back();
拷贝算法
copy()接受三个参数,前两个为输入元素范围,第三个为输出元素范围。返回一个指向拷贝的最后一个元素之后的迭代器。
replace(list.begin(),list.end(),0,42);//将list中所有的0改为42
replace_copy(list.cbegin(),list.cend(),back_inserter(vec),0,42)//将替换后的序列存入vec,并不更改list中的元素。
10.2.3重排容器元素的算法
sort()接受两个参数,重排范围内的元素。由小到大排列。
end_unique()接受量迭代器参数,两个迭代器范围内的元素中重复出现的排在序列末。返回无重复元素序列之后的第一个迭代器。
10.3定制操作
重载的sort(),接受第三个参数,此参数是一个谓词。
谓词
一元谓词:接受一个参数;二元谓词:接受两个参数。
接受谓词参数的算法对输入序列中的元素调用谓词,以此元素类型必须能转换为谓词的参数类型。
10.1概述
大多数算法都定义再头文件algorithm中。
find(vec.cbegin(),vec.cend(),val),寻找两个迭代器之间的所有元素中与val第一个相等的值,并返回指向这个元素的迭代器。
10.2
10.2.1只读算法
accumulate()接受三个参数,前两个位需要求和的元素的范围,第三个为和的初值。
其中有个假定,元素类型要有对应的“+”操作如:
string sum=accumulate(v.cbegin(),v.cend(),string(“”))
此条语句会将v中的所有string元素连接起来并赋值给sum;
操作两个序列的算法 equal()将第一个序列中的所有元素与第二个序列中的对应元素进行比较,都相等则返回一个true; 它接受三个参数,前两个为第一个序列的范围,最后一个为第二个序列的首元素 注意:两个序列的元素类型可以不一样,如第一个序列为string,第二个序列为char*,但第二个序列至少和第一个序列一样长
10.2.2写容器元素的算法
算法不能改变容器大小
如:
fill()接受三个参数,前两个为元素范围,第三个为元素值,此函数将范围内的所有元素替换为第三个参数的元素值
算法不检查写操作
fill_n(vec.begin(),vec.size(),0);//将所有元素置为0
错误:fill_n(vec.begin(),10,0);//vec本来是空的,也就是说fill_n不检查容器大小是否足够
插入迭代器:将一个新的元素插入到容器中
back_inserter()
例:auto it=back_inserter(vec);
*it=42;
在此例中我们能通过it将值42插入到容器中,等同于调用push_back();
拷贝算法
copy()接受三个参数,前两个为输入元素范围,第三个为输出元素范围。返回一个指向拷贝的最后一个元素之后的迭代器。
replace(list.begin(),list.end(),0,42);//将list中所有的0改为42
replace_copy(list.cbegin(),list.cend(),back_inserter(vec),0,42)//将替换后的序列存入vec,并不更改list中的元素。
10.2.3重排容器元素的算法
sort()接受两个参数,重排范围内的元素。由小到大排列。
end_unique()接受量迭代器参数,两个迭代器范围内的元素中重复出现的排在序列末。返回无重复元素序列之后的第一个迭代器。
10.3定制操作
重载的sort(),接受第三个参数,此参数是一个谓词。
谓词
一元谓词:接受一个参数;二元谓词:接受两个参数。
接受谓词参数的算法对输入序列中的元素调用谓词,以此元素类型必须能转换为谓词的参数类型。
相关文章推荐
- 《C++primer(第五版)》学习笔记-第十章:泛型算法
- 【C++primer学习笔记】第11章 泛型算法
- c++ primer(第五版)学习笔记及习题答案代码版(第十章)泛型算法
- C++primer第五版第十章学习笔记
- 090518-C++primer 4th学习笔记:1.3节
- c++primer学习笔记
- c++primer学习笔记-----2.6自定义数据结构
- 鸟哥Linux私房菜_基础篇(第二版)_第十章学习笔记
- C++primer学习笔记----面向对象程序设计(1)
- C++Primer第6章学习笔记
- C++primer第五版第九章学习笔记
- C++primer学习笔记----智能指针
- 《COM原理及应用》学习笔记之第十章
- C++Primer学习笔记第六章(6/18)语句
- C++primer学习笔记-----6.2参数传递
- [core java学习笔记][第十章部署应用程序]
- C++primer学习笔记-----6.4函数重载
- C++编程思想学习笔记---第十章 名字控制
- C++Primer学习笔记
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十章 对象初始化