C++ lambda表達式

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》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章