写点什么

C++ sort 和 for_each 算法的普通、文艺和 2B 用法

作者:老王同学
  • 2023-03-08
    广东
  • 本文字数:835 字

    阅读完需:约 3 分钟

题目:对数组元素进行从大到小排序.

说明:本文用 sort 和 for_each 算法的 3 种使用方法,来说明 C++算法的谓词参数如何传入自己定义的"函数"。


普通用法,传入普通函数

#include <vector>#include <algorithm>#include <iostream>using namespace std; //普通比较函数bool normal_greater(const int& a, const int& b){    return a > b;}//普通打印函数void normal_print(const int& value){    cout << value << endl;} int main(){    vector<int> vec = {3, 5, 4, 1, 2};	    //普通排序过程    sort(vec.begin(), vec.end(), normal_greater);    //普通打印过程    for_each(vec.begin(), vec.end(), normal_print);}
复制代码

这种用法,好像没有什么需要说明的。


文艺用法,就是定义函数对象。


#include <vector>#include <algorithm>#include <iostream>using namespace std; //文艺比较函数class funobject_greater{public:    bool operator()(const int& a, const int& b)    {        return a > b;    }};//文艺打印函数class funobject_print{public:    void operator()(const int& value)    {        cout << value << endl;    }}; int main(){    vector<int> vec = {3, 5, 4, 1, 2};     //文艺排序过程    sort(vec.begin(), vec.end(), funobject_greater());    //文艺打印过程    for_each(vec.begin(), vec.end(), funobject_print());}
复制代码

函数对象,是 C++STL 中的标准配件。


2B 用法,Lambda 表达式

Lambda 表达式是 C++11 新引入的,即匿名函数。


#include <vector>#include <algorithm>#include <iostream>using namespace std; int main(){    vector<int> vec = {3, 5, 4, 1, 2};     //2B排序过程    sort(vec.begin(), vec.end(), [](const int& a, const int& b){return a > b;});    //2B打印过程    for_each(vec.begin(), vec.end(), [](const int& value){cout << value << endl;});}
复制代码

代码的确简洁很多,2B,是褒义。

发布于: 刚刚阅读数: 4
用户头像

老王同学

关注

还未添加个人签名 2020-04-30 加入

还未添加个人简介

评论

发布
暂无评论
C++ sort和for_each算法的普通、文艺和2B用法_c++_老王同学_InfoQ写作社区