c++ - 将数组传递给 lambda 函数

标签 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 实例化接受隐藏在 auto& 后面的 int(&)[5]

如果由于某种原因您无法遵守通用 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);
}

这些都不是特定于 lambda 的。对于任何函数都是一样的。

关于c++ - 将数组传递给 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52279897/

相关文章:

c++ - 使用两个线程运行和中断无限循环

c# - 返回委托(delegate)的 Lambda 表达式

c# - Expression 和 Delegate 之间的转换错误

python - 如何在 Python 2.7 中创建 Lambda 函数来创建、重新启动、删除、修改 ElastiCache Redis?

引用的 C++ 变量范围

c++ - 为什么渲染引擎将图像 segmentation 为小方 block ?

c++ - 为什么我不能用谓词的实例化构造 std::set,但我可以分配以这种方式构造的 std::set?

c++ - 多线程总和

c# - 如何获取lambda表达式参数

Java lambda 表达式、转换和比较器