链表的 lambda 长度

Lambda length of Linked List

本文关键字:长度 lambda 链表      更新时间:2023-10-16

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

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

如果我从自动更改为 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);
};