参考:http://www.weixueyuan.net/view/6406.html

总结:

  STL提供了大量操作容器的算法,这些算法大致可以分为:排序、搜索、集合运算、数值处理和拷贝等,这些算法的实现是采用函数模板来实现的,函数模板类似于类模板。

  对于STL算法而言,算法是一样的,只是所处理的容器不同,只要使用合适的迭代器,就可以直接用算法操作容器了。

  如果我们需要使用STL算法,则需要在头文件中包含algorithm头文件,在本程序中使用了四种STL算法:generate、replace_if、sort和for_each。

  sort函数前面两个参数仍然是迭代器,第三个参数是可选的,默认情况下sort将会以升序进行排序。

  STL中还提供了很多其它的算法,在今后的学习过程中,大家如果有需要可以去查找C++的类库手册。

---------------------     

STL提供了大量操作容器的算法,这些算法大致可以分为:排序、搜索、集合运算、数值处理和拷贝等,这些算法的实现是采用函数模板来实现的,函数模板类似于类模板。对于STL算法而言,算法是一样的,只是所处理的容器不同,只要使用合适的迭代器,就可以直接用算法操作容器了。

例1:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std; bool compare( const int & a, const int & b)
{
return a > b;
} void display( int i )
{
cout<< i << " ";
} bool odd( int i )
{
return i % != ;
} int main()
{
vector < int > num ( );
//生成随机数字,填充num
generate( num.begin(), num.end(), rand );
//将其中的奇数全部替换我0
replace_if( num.begin(), num.end(), odd, );
//从大到小排序
sort( num.begin(), num.end(), compare );
for_each( num.begin(), num.end(), display );
cout << endl;
return ;
}

如果我们需要使用STL算法,则需要在头文件中包含algorithm头文件,在本程序中使用了四种STL算法:generate、replace_if、sort和for_each。下面我们来一一了解这四种算法的功能。

generate函数前面两个参数均为迭代器,分别指向开头和结尾,通过这两个迭代器,我们可以为num的10个元素赋值。由于num是整型的vector实例,因此要求generate函数的第三个参数返回值也为整型,因此我们将库函数rand作为第三个参数,用于生成随机数,其返回值是整型。

调用完generate函数之后,num中就分别填充了一些随机数值。replace_if前面两个参数还是两个迭代器,通过这两个迭代器我们可以对num进行遍历,遍历过程中会逐一判断元素是否为奇数,如果为奇数,则将其换为0。Replace_if要求第三个参数为一个返回bool类型的函数,为此我们专门设计了一个odd函数,用于判断数值是否为奇数,如果为奇数则返回true,否则返回false。因为num为int型vector实例,因此要求用来替换的元素也必须为int型,故replace_if函数最后一个参数必须为int型,在本例中我们直接使用0。

接着我们对num进行排序,sort函数前面两个参数仍然是迭代器,第三个参数是可选的,默认情况下sort将会以升序进行排序。本例中使用了第三个参数,第三个参数为compare函数的函数名。因为num为整型实例,因此compare函数的两个参数为整型的引用。同时由于sort函数要求第三个参数为返回一个bool类型的函数,因此compare也必须返回bool类型。本例中我们希望num以降序的方式排列,因此我们compare函数返回“a > b”。当我们返回“a < b”或者根本就不提供第三个参数时,函数将会以升序的形式排列num。

最后为了打印num中的所有元素,我们使用了for_each函数,当然如果使用循环根据下标或使用迭代器都是可以打印num中的元素的,只不过我们是想介绍一下for_each函数而已。for_each函数前面两个参数仍然是两个迭代器,通过这两个迭代器,我们就可以遍历num中的元素。for_each函数第三个参数用来完成打印操作,我们定义了一个display函数用于完成此操作。

在整个程序中我们一直没有使用任何循环就完成了整个操作,这是因为这四个函数中分别定义了内建的迭代操作,而我们只需要指明迭代的起始和终止位置即可。

STL中还提供了很多其它的算法,在今后的学习过程中,大家如果有需要可以去查找C++的类库手册。

最新文章

  1. android-webview开发中的各种使用方法(持续更,尽量全)
  2. 读书笔记 1 of Statistics :Moments and Moment Generating Functions (c.f. Statistical Inference by George Casella and Roger L. Berger)
  3. 让IE支持max-width
  4. 有关于CSS的面试题和练习
  5. (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)
  6. mysql左联右联内联
  7. 使用 angular directive 和 json 数据 D3 随着标签 donut chart演示样本
  8. [CSS]第一项和最后一项样式
  9. [M$]微软提供的ProcessExplorer等系统工具集合
  10. 2019/3/7 Java学习之多线程(基础)
  11. 【洛谷P1637】三元上升子序列
  12. 三. html&amp;JavaScript&amp;ajax 部 分
  13. ntp时间同步参考
  14. AWS、Azure和Google的云容器注册表有什么区别?
  15. bat 传递超过10个参数(bat参数遍历)
  16. javascript利用jquery-1.7.1来判断是否是谷歌Chrome浏览器
  17. python——回文函数(reversed)
  18. 使用ABP框架踩过的坑系列3
  19. [转]如何使用Fiddler抓取指定浏览器的数据包
  20. Springboot与日志

热门文章

  1. QQ Protect 的删除
  2. 2017-2018-2 20165303 实验三《Java面向对象程序设计》实验报告
  3. 一款好用的取色工具TakeColor
  4. Linux下安装 jdk
  5. android--------自定义控件 之 ViewGroup
  6. vivado实现模16的计数器
  7. 安卓——AlertDialog多样按钮
  8. github上fork了别人的项目后,再同步更新别人的提交(转)
  9. [转载]Python正则表达式匹配反斜杠&#39;\&#39;问题
  10. ActiveMQ 配置jdbc主从