考虑链表列表节点的以下定义:
struct Node
{
int data;
struct Node *next;
};
我是c++的新手,来自函数式编程。我希望编写一个lambda来计算链表的长度。
我写:
auto listLength = [](Node * list){
if(list == NULL) return 0;
else return 1 + listLength(list -> next);
};
error: variable 'lengthList' declared with 'auto' type cannot appear in its own initializer
如果从auto更改为int,则会得到:
error: called object type 'int' is not a function or function pointer
有什么问题
最佳答案
问题是双重的:
1)Lambda需要捕获在Lambda之外定义的任何对象。
2)listLength
的定义直到整个变量声明的结尾才完整。
这有点像鸡与蛋的问题。最干净的解决方案是使用std::function
:
#include <functional>
std::function< int (Node *)> listLength;
listLength = [&](Node * list){
if(list == NULL) return 0;
else return 1 + listLength(list -> next);
};