c++ - 将数组传递给 lambda 函数
问题描述
我目前正在学习 lambda 函数的工作原理,因此尝试将数组传递给 Lambda 函数,我想将其打印出来。我的问题是,我不明白如何将数组传递给函数。问题似乎根源于数组在传递给 lambda 函数时的转换。这是函数的当前状态:
auto print_array = [](int &array, int i) -> int {
//print out array
return 0;
}(&actual_array, actual_i);
高度赞赏帮助!
解决方案
您不能按值传递数组,并且传递指针的语法都是错误的。
不过,实际上很容易将指针或引用传递给数组。使用泛型 lambda,您可以忽略维度是类型的一部分这一事实,只需简单地编写:
#include <iostream>
int main()
{
int actual_array[5] = {7,8,9,2,1};
const int actual_i = 3;
auto print_array = [](auto& ar, int i) {
std::cout << ar[i] << '\n';
};
print_array(actual_array, actual_i);
}
在此示例中,print_array
您调用的实例化是接受int(&)[5]
隐藏在auto&
.
如果由于某种原因您不能遵守通用 lambda(基本上是一个模板),那么就去老派:
#include <iostream>
int main()
{
int actual_array[5] = {7,8,9,2,1};
const int actual_i = 3;
auto print_array = [](const int* ar, int i) {
std::cout << ar[i] << '\n';
};
print_array(&actual_array[0], actual_i);
}
这些都不是特定于 lambdas 的。任何功能都一样。
推荐阅读
- vba - 如何找到丢失的用户窗体控件
- javascript - 如何为 Jekyll 页面加载外部脚本?
- c# - FastMember:指定的参数超出了有效值的范围。参数名称:名称
- java - 是否可以在页面加载之前填充 JSF 视图?
- jupyter - 如何安装 Jupyterhub
- server - 在 Ubuntu 上安装 Aerospike:无法启动服务器
- javascript - Chrome Extension can modify Window object but can't create new variable
- java - IntelliJ 14 - 从类路径中删除额外的 JAR
- scala - 其他栏目频率计算与探索
- docker - 单个域的多个位置的 Nginx 代理