我有以下程序,尝试结合使用lambda functions
和std::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的乘法表。
答案 0 :(得分:6)
在我看来像是一个简单的错字。更改
return a*b*b;
到
return a*b*c;
答案 1 :(得分:3)
将功能更改为:
int multiply(int a, int b, int c)
{
return a*b*c;
}