关闭

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

标签: each算法c++classlambdac
1799人阅读 评论(0) 收藏 举报
分类:

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


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


1。普通用法,传入普通函数

#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);
}
这种用法,好像没有什么需要说明的。


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

#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中的标准配件。


3。2B用法,是C++11新引入的Lambda表达式,即匿名函数。

#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,是褒义。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:203404次
    • 积分:2656
    • 等级:
    • 排名:第13703名
    • 原创:55篇
    • 转载:5篇
    • 译文:0篇
    • 评论:28条
    最新评论