admin管理员组

文章数量:1624338

目录

  • 一、Lambda 函数与表达式
  • 二、priority_queue 定义 及其使用
  • 三、sort定义 及其使用
  • 参考

一、Lambda 函数与表达式

  • C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。

  • Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。

  • Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:

  • [capture](parameters)->return-type{body}

  • 例如:

  • [](int x, int y){ return x < y ; }

  • capture 定义如下:

[] // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。

二、priority_queue 定义 及其使用

template <class T, class Container = vector<T>,class Compare = less<typename Container::value_type> > 
	class priority_queue;
  • 其中第三个参数默认为less (从大到小排) ;less 和 greater 是stl提供的比较函数;
  • 下面显式声明为greater;
std::priority_queue<int, std::vector<int>, std::greater<int> >
                            third ;
  • 利用lambda实现 如下:

  • 例子:
  • 这几种方法都可,其中auto帮我们推导了类型,decltype帮我们解析了类型
function<bool(const int&a, const int&b)> mycomp2 = [&](const int &a, const int &b) { return a < b; };
auto mycomp = [&](const int &a, const int &b) { return a < b; };

priority_queue<int, vector<int>, function<bool(const int&, const int&)>> que5(mycomp);
priority_queue<int, vector<int>, decltype(mycomp2) > que3(mycomp2);

三、sort定义 及其使用

template <class RandomAccessIterator, class Compare>
	void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);


sort(wordList.begin(), wordList.end(), greater<string>());
sort(wordList.begin(), wordList.end(), [](const string &a, const string &b) { return a < b; }) ;

参考

cplusplus

C++ 函数

本文标签: 多种声明priorityqueueLambdasort