C++练习:Lambda

概念

在C++中,Lambda表达式是一种匿名函数,它允许你在不预先定义函数的情况下快速创建函数对象。Lambda表达式通常用于编写简短的、一次性的函数,它们可以捕获和使用周围作用域中的变量。

Lambda表达式的基本语法如下:

[capture](parameters) -> return_type {
    // function body
}
  • capture:捕获列表,定义了Lambda表达式可以访问的外部变量。它可以是值捕获(通过复制)、引用捕获(通过引用)或两者的组合。
  • parameters:参数列表,定义了Lambda表达式接受的参数,类似于普通函数的参数列表。
  • return_type:返回类型,这是Lambda表达式返回的值的类型。在大多数情况下,这个可以被省略,因为编译器可以推断出来。
  • function body:函数体,包含了Lambda表达式的代码。

Lambda表达式可以用于任何需要函数对象的地方,例如作为参数传递给算法,或者作为条件语句的结果。

以下是一些Lambda表达式的示例:

无参数和无返回值的Lambda

auto lambda = []() {
    std::cout << "Hello, World!" << std::endl;
};
lambda(); // 输出 "Hello, World!"

有参数和有返回值的Lambda

auto sum = [](int a, int b) -> int {
    return a + b;
};
int result = sum(5, 3); // result 是 8

捕获外部变量

int value = 10;
auto print_value = [value]() {
    std::cout << "Value is " << value << std::endl;
};
print_value(); // 输出 "Value is 10"

引用捕获

int outer_var = 5;
auto modify_and_print = [&outer_var]() {
    ++outer_var;
    std::cout << "Outer var is now " << outer_var << std::endl;
};
modify_and_print(); // 输出 "Outer var is now 6"

值捕获

int outer_var = 5;
auto print_captured = [outer_var]() {
    std::cout << "Outer var was " << outer_var << std::endl;
};
print_captured(); // 输出 "Outer var was 5"

实战:

502. IPO . - 力扣(LeetCode)

class Solution {
public:
    int findMaximizedCapital(int k, int w, vector<int>& profits, vector<int>& capital) {
        auto cmp = [&capital](int &a, int &b){
            return capital[a] > capital[b];
        };

        priority_queue<int, vector<int>, less<int>> candidate;
        priority_queue<int, vector<int>, decltype(cmp)> indexs(cmp);

        for(int i = 0; i < capital.size(); i ++){
            indexs.push(i);
        }

        while(k){
            while(!indexs.empty() && w >= capital[indexs.top()]){ // 注意非空判断
                candidate.push(profits[indexs.top()]);
                indexs.pop();
            }

            if(candidate.empty()) break;
            w += candidate.top();
            candidate.pop();
            k --;
        }
        
        return w;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值