lambda簡介
一個lambda表達式表示一個可調用的代碼單元。我們可以將其理解爲一個無名的內聯函數。lambda表達式形式如下:
[捕獲列表] (參數列表)-> 返回值類型 {函數體}
捕獲列表是一個lambda所在函數中定義的局部變量的列表(通常爲空),與普通函數不同,lambda必須使用尾置返回來指定返回類型。參數列表和返回類型可以省略,但是必須包含捕獲列表和函數體。
lambda的調用方式與普通函數調用方式一樣,都是使用調用運算符。
傳遞參數
捕獲列表
lambda通過將局部變量包含在其捕獲列表中來指出將會使用這些變量,如果有多個變量,使用逗號分隔。捕獲列表指引lambda在其內部包含訪問局部變量所需的信息。
結合STL算法
Lambda表達式與STL算法一起使用,比較方便。
代碼
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void test01()
{
auto f = []() ->int { return 42;};
std::cout << "返回的值是:" << f() << std::endl;
}
//傳遞參數
void test02()
{
auto f = [](const string &a, const string &b){
std::cout << "a.size:" << a.size() << ", b.size:" << b.size() << std::endl;
return a.size() > b.size();
};
std::cout << "返回的值是:" << f("this is a cat", "hello world") << std::endl;
}
//使用捕獲列表
void test03()
{
int a = 10, d = 20;
auto f = [a, d](const string &b){
std::cout << "a:" << a<< ", d:" << d << ", b.size:" << b.size() << std::endl;
return a > b.size();
};
std::cout << "返回的值是:" << f("hello world") << std::endl;
}
//結合STL算法使用
void test04()
{
int sz = 7;
vector<string> v;
v.push_back("h2");
v.push_back("hello6");
v.push_back("hel4");
v.push_back("hellow7");
v.push_back("hello world!15");
//find_if:獲取一個迭代器,只想第一個滿足size() >= sz的元素
auto wc = find_if(v.begin(),
v.end(),
[sz](const string &a){
return a.size() >= sz;
});
std::cout << "結果是:" << *wc << std::endl;
}
int main()
{
test01();
test02();
test03();
test04();
cout << "----------" << endl;
return 0;
}
參考《C++ primer》