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

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

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

for_each算法和transform算法区别

主要介绍STL中transform()算法和for_each()算法的区别
  • xiao3404
  • xiao3404
  • 2016年01月16日 22:34
  • 954

C++标准库---for_each()用法及回返值

for_each()用法及回返值: #include #include #include using namespace std; class MeanValue { private: lon...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2014年12月09日 21:29
  • 1148

现代C++ 基于范围的for和for_each语句

现代C++ 基于范围的for和for_each语句
  • YhL_Leo
  • YhL_Leo
  • 2015年10月04日 16:14
  • 3314

STL中vector以及 for_each几种用法

/* * vector_test.cpp * * Created on: 2015-3-22 * Author: gino */ #include #include ...
  • u011641885
  • u011641885
  • 2015年03月22日 19:13
  • 721

C++ 中的单例模式 普通,2B, 文艺

一、 普通Singleton #include using namespace std; class Singleton { public: static Singl...
  • orzlzro
  • orzlzro
  • 2012年01月09日 13:07
  • 932

【C++ STL应用与实现】26: 如何使用std::for_each以及基于范围的for循环 (since C++11)

本文总结了STL算法中for_each, for_each算法很常用,以致于C++11定义了一个新的语法: `range based for loop`, 也就是基于范围的for循环,直接在语法层面把...
  • elloop
  • elloop
  • 2015年12月23日 00:25
  • 9204

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

std::for_each template Function for_each (InputIterator first, InputIterator last, Function f...
  • shihui512
  • shihui512
  • 2013年05月15日 17:39
  • 3652

stable_sort()与sort()的用法区别

 文章转载自:http://www.cnblogs.com/ffhajbq/archive/2012/07/24/2607476.html 关于stable_sort()和sort()...
  • u014800748
  • u014800748
  • 2014年08月14日 22:01
  • 2059

C++11 lambda表达式在for_each和transform算法下的使用

以前,在lambda表达式没有进入标准的时候,对容器的遍历等涉及到使用函数指针的情况,一般人会懒得使用std::for_each,或std::transform,也许只是一个短短的几句话,却要单独写个...
  • czyt1988
  • czyt1988
  • 2015年02月08日 13:52
  • 3669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ sort和for_each算法的普通、文艺和2B用法
举报原因:
原因补充:

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