【问题标题】:Lambda functions in C++ strange behaviour [closed]C ++中的Lambda函数奇怪的行为[关闭]
【发布时间】:2018-09-08 21:44:45
【问题描述】:

我有以下程序,我尝试使用lambda functionsstd::bind 的组合打印出 10 的乘法表。主要目的是学习以上两个概念。但是我得到的输出(如下所示)很奇怪。

#include <iostream>
#include <vector>
#include <algorithm>
#include <thread>
#include <zconf.h>
#include <functional>
using namespace std;
using namespace std::placeholders;
int multiply(int a, int b, int c)
{
    return a*b*b;
}
int main()
{
    auto f = std::bind(multiply, 5 , 2 , _1);
    vector<int> vec = {1,2,3,4,5,6,7,8,9,10};
    for_each(vec.begin(), vec.end(), [f](int &v) {cout << "Multiplication Table (10) :" << "v: " << v << " " << f(v) << endl;});
    return 0;
}

输出:

Multiplication Table (10) :v: 1 20
Multiplication Table (10) :v: 2 20
Multiplication Table (10) :v: 3 20
Multiplication Table (10) :v: 4 20
Multiplication Table (10) :v: 5 20
Multiplication Table (10) :v: 6 20
Multiplication Table (10) :v: 7 20
Multiplication Table (10) :v: 8 20
Multiplication Table (10) :v: 9 20
Multiplication Table (10) :v: 10 20

Process finished with exit code 0

我在上面的代码中做错了什么。应该修复什么,以便它实际打印 10 的乘法表。

【问题讨论】:

    标签: c++ lambda stdbind


    【解决方案1】:

    对我来说似乎是一个简单的错字。改变

    return a*b*b;
    

    return a*b*c;
    

    【讨论】:

      【解决方案2】:

      将您的功能更改为:

      int multiply(int a, int b, int c)
      {
          return a*b*c;
      }
      

      【讨论】:

        猜你喜欢
        • 2023-01-26
        • 2011-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多