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

原创 2012年03月23日 22:26:57

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


说明:本文用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,是褒义。

JAVA如何调用WINDOWS命令行

JAVA如何调用WINDOWS命令行2008-04-01 23:40用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Pr...

JAVA内存使用--如何计算一个Java对象占用的字节数

转载:http://blog.csdn.net/kp034/article/details/7077757 原文地址:点击打开链接 ,翻译有出入之处,请以原文为准 本文中,我们讨论...

c++ 标准模板库 STL 算法之 for_each 函数的使用用法详解

std::for_each template Function for_each (InputIterator first, InputIterator last, Function f...

你是普通程序员、文艺程序员还是2B程序员?

求2的32次方 普通程序员 Java code ? 1System.out.println(Math.pow(2, 32)); 文艺程序员 Java code ? 1System.out....
  • asqi1
  • asqi1
  • 2014年08月06日 15:03
  • 1126

普通程序猿 文艺程序猿 2B程序猿

求2的32次方 普通程序员 Java code ? 1 System.out.println(Math.pow(2, 32)); ...

普通程序猿、文艺程序猿和2B程序猿的区别

求2的32次方 普通程序员 Java code ? 1 System.out.println(Math.pow(2, 32)); ...

swap - 普通程序员、文艺程序员、2B程序员

C、C++版:看到同学人人的发表日志,觉得有趣,然后就写下来。仅供娱乐。 普通程序员: void swap (int &a, int &b) { int temp = a; a = b; b...

普通青年、文艺青年、2B青年---最近老火了

普通青年-》文艺青年-》2B青年  进化图 常态波波——文艺波波——二逼波波 常态邓呆——文艺邓呆——二逼邓呆 ...

普通程序猿 文艺程序猿 2B程序猿

求2的32次方 普通程序员 Java code ? 1 System.out.println(Math.pow(2, 32)); ...

C++之STL(五):非变动性算法源代码分析与使用示例( for_each、min_element 、find_if、search 等)

非变动性算法代码分析与示例: 一、for_each  C++ Code  1 2 3 4 5 6 7 8 9 10 11 1...
  • Al_xin
  • Al_xin
  • 2014年09月11日 08:57
  • 570
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ sort和for_each算法的普通、文艺和2B用法
举报原因:
原因补充:

(最多只允许输入30个字)