到目前为止,排序、合并、查找模板函数我们都已经深入接触过了,读者是否能够感受到<algorithm>算法头文件的便利之处?对于STL库给定的完美容器我们直接用,高效算法我们直接调,大大提高了我们的工作效率。本节我们将继续学习另外一个模板函数——for_each()。for_each(beg , end , op):这里表示对区间[beg , end)进行op操作,这里op既可以是普通函数,又可以是仿函数。

下面我们通过for_each()来进行遍历输出。

#include<iostream>
#include<vector>
#include<map>
#include<iterator> //使用迭代器函数进行切割,复习前面知识 next(it,n) 
#include<algorithm>//包含算法头文件!
using namespace std;
/*仿函数*/
struct out
{
void operator()(const pair<string,string>& p )const
{
cout << "想要学习【"  << p.first << "】可以访问【"<< p.second << "】\n";
}
};
/*普通函数*/
void easy_out(const pair<string,string>&p)
{
cout << "想要学习【"  << p.first << "】可以访问【"<< p.second << "】\n";
}
void test()
{
map<string,string>mp{
{"C++教程","https://www.dotcpp.com/course/cpp/"},
{"C语言教程","https://www.dotcpp.com/course/c/"},
{"计算机二级C语言","https://www.dotcpp.com/course/erjic/"},
{"数据结构教程","https://www.dotcpp.com/course/ds/"},
{"Python教程","https://www.dotcpp.com/course/python/"},
{"Java教程","https://www.dotcpp.com/course/java/"}
};//初始化列表
cout << "通过仿函数进行输出:\n" ;
for_each(mp.begin(),mp.end(),out());
cout << '\n';
cout << "通过普通函数进行输出:\n" ;
for_each(mp.begin(),mp.end(),easy_out);
} 
int main(){
    system("title dotcpp.com");
    test();
    return 0;
}

编译结果如下:for_each()

成功分别通过普通函数和仿函数遍历同一个容器。

总结:我们可以通过for_each()实现for循环的效果,通过仿函数的方式,大幅度提高代码的复用性!

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)