c++ - 如何在 lambda 表达式中传递变量?

标签 c++ c++11 lambda

我现在正在练习 lambda 表达式,我做的这个程序是获取一个主题的加权平均值,第一个 lambda 表达式 'get_avg' 是获取数据,而过程是 'sum_avg',当它运行时,sum_avg 正在输出 '-nan(ind)' 这不是我想要的答案。

#include<iostream>
#include<thread>
using namespace std;
int main() {
float m = 0, w = 0;
auto get_avg = [](float m, float w) {

    cout << "ENTER THE GRADE: ";
    cin >> m;
    cout << "ENTER THE UNITS: ";
    cin >> w;
    return m, w;
};
get_avg(m, w);
auto sum_avg = [](float m,float w){
    cout << "THE WEIGHTED AVERAGE IS :" <<m*w/w << endl;
};
sum_avg(m,w);
system("PAUSE");
return 0;
}

最佳答案

为了能够更改 main 函数的 mw 的值,您需要将它们传递到 get_avg lambda 引用:

// you didn't need <thread> header, don't include it
#include<iostream>

// Never ever take the whole std namespace into your program!
// Take only the names you need,
// or just use the fully qualified names, e.g. std::cout everywhere.
using std::cin;
using std::cout;
using std::endl;

int main() {
    float m = 0, w = 0;
    auto get_avg = [](float &m, float &w) {
        cout << "ENTER THE GRADE: ";
        cin >> m;
        cout << "ENTER THE UNITS: ";
        cin >> w;
    };
    get_avg(m, w);
    auto sum_avg = [](float m,float w){
        cout << "THE WEIGHTED AVERAGE IS :" <<m*w/w << endl;
    };
    sum_avg(m,w);
    system("PAUSE");  // I'm not sure why you use this here.
    return 0;
}

您也可以按值获取变量,并返回 std::pair来自第一个 lambda。然后你可以使用 std::tie将其返回值赋给m,和w:

#include <iostream>
#include <tuple>
#include <utility>

int main() {
    float m = 0, w = 0;
    auto get_avg = [](float m, float w) {
        std::cout << "ENTER THE GRADE: ";
        std::cin >> m;
        std::cout << "ENTER THE UNITS: ";
        std::cin >> w;
        return std::make_pair(m, w);
    };
    std::tie(m, w) = get_avg(m, w);
    auto sum_avg = [](float m, float w){
        std::cout << "THE WEIGHTED AVERAGE IS :" << m*w/w << std::endl;
    };
    sum_avg(m, w);
    return 0;
}

顺便说一下,这个 m*w/w 并没有真正做很多事情,我让你找出原因。

关于c++ - 如何在 lambda 表达式中传递变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59159744/

相关文章:

c++ - 如何给 lambda 一个持续时间与 lambda 一样长的内部值?

c++ - 为什么默认情况下 C++1 1's lambda require "mutable"keyword 用于按值捕获?

c++ - 修改 LLVM Tracer 以进行故障注入(inject)

c++ - 如何将用户输入(字符串)转换为字符数组?

c++ - C++11 中的 vector <字符> VS vector < bool >

c++ - 可变递归模板

C++ 数组和溢出

c++ - 为什么在销毁后调用 QObject 销毁信号?

c++ - 为什么 std::begin() 和 std::end() 适用于固定数组,而不适用于动态数组?

Python Pandas 滚动窗口应用多个 lambda 函数