链表的 lambda 长度
Lambda length of 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
如果我从自动更改为 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);
};
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- 从C字符串中获取奇怪的字符串长度
- 如何在数组中找到字符串的长度
- 获取字符串的长度并将其分配给数组
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 数组长度,为什么从命令行获取时不能使用它?
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在C++中查找范围的长度
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- 如何创建长度由常量参数指定的数组
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 链表的 lambda 长度
- async_read_until的Lambda未初始化长度参数