gpt4 book ai didi

c++ - 如何修改此代码以使用函数而不是 lambda?

转载 作者:搜寻专家 更新时间:2023-10-31 02:14:53 24 4
gpt4 key购买 nike

我有一个有效的斐波那契函数,它从虚拟列表 {1,1,1,1,1,1} 返回斐波那契数列。这是我的代码。

list<int> immutableFibonacci(int position)
{
list<int> oldList(position, int(1));

list<int> newList = accumulate(oldList.begin(), oldList.end(), list<int>{},
[](const list<int> a, int b)
{
list<int> d = a;

if (a.size()<2)
{
d.push_back(1);
}
else
{
auto start = d.rbegin();
auto first = *start;
start++;
auto second = *start;
d.push_back(first + second);
}
return d;
});
return newList;
}

我不想传递 lambda 表达式 [](const list a, int b) 来计算,而是想传递一个函数的名称。我该怎么做呢?它基本上是函数 immutableFibonacci 中的一个函数,但我在执行此操作时遇到了麻烦。

最佳答案

代替:

list<int> newList = accumulate(oldList.begin(), oldList.end(), list<int>{},
[](const list<int> a, int b)
{
list<int> d = a;

if (a.size()<2)
{
d.push_back(1);
}
else
{
auto start = d.rbegin();
auto first = *start;
start++;
auto second = *start;
d.push_back(first + second);
}
return d;
});

如上,并传递一个实际的函数,就像这样。你需要函数指针:

list<int> newList = accumulate(oldList.begin(), oldList.end(), list<int>{},
funcname);

//Below is the function

list<int> funcname(list<int> a, int b) {
list<int> d = a;

if (a.size()<2)
{
d.push_back(1);
}
else
{
auto start = d.rbegin();
auto first = *start;
start++;
auto second = *start;
d.push_back(first + second);
}
return d;
}

对于自定义比较器,您可以传递函数指针或 lambda,对于您的示例,您使用了 lambda。

关于c++ - 如何修改此代码以使用函数而不是 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39400018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com