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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

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

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

普通程序猿、文艺程序猿和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)); ...

我的精神分裂——普通青年用二-B的方式走文艺的范儿

(一直以来都是以一种低沉的文笔在写些我的垃圾生活,垃圾感想,每次都会放那些特定的音乐,那是一种心境,那些音乐带着我的手在敲动。今天我想换种音乐,猜猜我在放什么音乐,很High的欧美慢摇,配一副很好的耳...

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

非变动性算法代码分析与示例: 一、for_each  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 // TEMPLATE FUN...

C++的STL算法for_each

for_each()函数将调用者提供的操作施加于每一个元素身上。它既可以是非变动性算法,也可以说是变动性算法。 [cpp] view plain copy  pri...

简单的程序诠释C++ STL算法系列之一:for_each

C++STL的非变易算法(Non-mutating algorithms)是一组不破坏操作数据的模板函数,用来对序列数据进行逐个处理、元素查找、子序列搜索、统计和匹配。      for_each用...

普通C++程序员 VS 文艺C++程序员

原贴最初发表在QQ空间:普通C++程序员 VS 文艺C++程序员,http://user.qzone.qq.com/31731705/blog/1323153107    BBS上看到一个讲C++...
  • viper
  • viper
  • 2011-12-12 14:19
  • 2097

STL Sort简介及 vector for_each()lamdba输出

STL Sort简介及 vector for_each()lamdba输出
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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