首页 > 解决方案 > 将数组传递给 lambda 函数

问题描述

我目前正在学习 lambda 函数的工作原理,因此尝试将数组传递给 Lambda 函数,我想将其打印出来。我的问题是,我不明白如何将数组传递给函数。问题似乎根源于数组在传递给 lambda 函数时的转换。这是函数的当前状态:

auto print_array = [](int &array, int i) -> int {

    //print out array

    return 0;

}(&actual_array, actual_i);

高度赞赏帮助!

标签: c++lambda

解决方案


您不能按值传递数组,并且传递指针的语法都是错误的。

不过,实际上很容易将指针或引用传递给数组。使用泛型 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 的。任何功能都一样。


推荐阅读