到目前为止,排序、合并、查找模板函数我们都已经深入接触过了,读者是否能够感受到<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循环的效果,通过仿函数的方式,大幅度提高代码的复用性!
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程