【问题标题】:How to pass 2D array/vector as parameter to the function [duplicate]如何将二维数组/向量作为参数传递给函数[重复]
【发布时间】:2022-08-09 19:51:08
【问题描述】:

我有一个初学者的疑问。

如何将用户输入的二维数组/向量传递给函数?

由于用户将输入行数和列数,因此我们将要求输入。

int n, m;
int main(){
    cin >> n >> m;
    return 0;
}

输入后,我们将询问每个单元格的值。

int n, m;
int main(){
    cin >> n >> m;
      
    char ary[n][m];
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
             cin >> ary[i][j];
        }
    }
    return 0;
}

一旦我们输入了整个矩阵,我们想通过一个函数来打印它。

int n, m;

void fun(char ary[n][m]){
     for(int i=0; i<n; i++){
         for(int j=0; j<m; j++){
             cout << ary[i][j] << \" \";
         }cout << endl;
     }
}

int main(){
    cin >> n >> m;
         
    char ary[n][m];
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
             cin >> ary[i][j];
        }
    }
         
    fun(ary);
    return 0;
}

为什么这段代码不起作用?我想也许我可以使用向量,但我也对此一无所知。请帮帮我。

谢谢你。

这是运行上述代码后的日志:

  • char ary[n][m]; 不是标准 C++。数组大小必须是编译时常量。你应该看看std::vector
  • 如果要传递矩阵,则传递矩阵。换句话说,将数组放在一个类/结构中并传递它。更简单的语法和更好的语义。对于数组,您还可以考虑使用 std::array 或 std::vector 它们的行为更像类,可以作为 (const) 引用传递并从函数返回(使用 \"C\" 风格更难正确执行数组)
  • @463035818_is_not_a_number 数组大小必须是编译时常量是什么意思?你能帮我看看如何用矢量来做吗?
  • 无论哪个 C++ 教科书或网站向您展示了这种声明数组的示例:扔掉那本书,或者不再访问该网站。你没有被教导正确的 C++。有关如何使用 std::vector 而不是数组的完整讨论,请参阅一本好的 C++ 教科书,就像这样。期望通过一次问一个问题来学习 C++ 是不现实的。学习 C++ 的唯一方法是使用一本好的教科书。
  • 在 C 中,使用 VLA,它将是 void fun(int n, int m, char ary[n][m])。对于 C++,您可以改用 std::vector&lt;std::vector&lt;int&gt;&gt;

标签: c++ arrays multidimensional-array parameters c++17


【解决方案1】:

std::vector 有一个构造函数,您可以在其中指定大小。请参阅here,构造函数编号 3。

有了它,你可以写

std::vector<std::vector<int>> vec( n , std::vector<int> (m, 0)); 

然后你有一个二维vector

然后,您将把它作为参考传递给您的函数。

void someFunction(std::vector<std::vector<int>>& vecPara) {
    // Do something with vecPara[i][j]
}

您使用的是所谓的 VLA(可变长度数组)。这些不是 C++ 语言的一部分。

如果你想在 C++ 中定义一个 C-Style 数组,那么 size-value 必须是一个常量编译时间值,比如例子“3”。它不能是变量的值,因为它可能会在运行时改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2021-08-17
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    相关资源
    最近更新 更多