c ++ - 链表的Lambda长度

时间:2016-06-05 19:52:52

标签: c++ lambda linked-list

考虑链接列表节点的以下定义:

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 个答案:

答案 0 :(得分:2)

问题有两个:

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);
};