一起学习交流~

c/c++细节知识点 13lambda

c++面试准备 laomuji 3周前 (09-04) 62次浏览 已收录 0个评论

基本概念

/*
为什么要使用lambda?
将lambda一般定义和使用在同一个地方进行,无需翻阅多页源码,容易看到内部实现
而且lambda不会阻止内联

lambda基本用法
[](){}
[] 中 填 = & ,表示按值访问和按引用访问外部所有变量,使用变量名表示按值访问外部变量,使用&变量名表示按引用访问外部某个变量
() 中 填参数
{} 中 填代码,可以有返回值
*/

代码

#include<iostream>
using namespace std;
int main13_1() {
    int a = 789;
    int b = 234;
    auto func1 = [a, b]() {return a + b; };//按值访问a b,内部不允许修改a和b的值
    auto func2 = [&a, b]() {a = 222; return a + b; };//按引用访问a,可以修改a.按值访问b,不能修改b
    auto func3 = [=]() { return a + b; };//按值访问外部所有变量
    auto func4 = [&]() {a = 2, b = 3; return a + b; };//按引用访问外部所有变量
    cout << func1() << endl;
    cout << func2() << endl;
    cout << func3() << endl;
    cout << func4() << endl;
    auto func5 = [=](int x, int y) {return x + y; };//参数用法与普通函数参数一样
    cout << func5(3,4) << endl;
    return 0;
}

#include<algorithm>
#include<vector>
int main13_2() {
    vector<int>nums = { 11,2,4,5,2,3,7,8 };
    //lambda经常用于这种场景
    auto func1 = [](int a, int b) {return a > b; };
    auto func2 = [](int a, int b) {return a < b; };
    sort(nums.begin(), nums.end(), func1);
    for (int num : nums)cout << num << " ";
    cout << endl;
    sort(nums.begin(), nums.end(), func2);
    for (int num : nums)cout << num << " ";
    cout << endl;
    return 0;
}
喜欢 (0)
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论