您的位置:首页 > 编程语言 > C语言/C++

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

2012-03-23 22:26 501 查看
题目:对数组元素进行从大到小排序.

说明:本文用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,是褒义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  each 算法 c++ class lambda c