c++ - 通过引用传递数组作为 C++ 中的函数参数

标签 c++

如何将在 main 方法中通过引用声明的数组作为参数传递给函数?编译器也需要尺寸,但是当我给它们变量时,编译器会给出数组无效整数尺寸的错误,代码如下:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int scanV(int Row, int value, int M, int (&tableValues)[])
{
for (int i = 0; i <= M; ++i)
{
    if (tableValues[Row - 1][i] == 1)
    {
        if (i + value <= M)
        {
            tableValues[Row][i+value] == 1;
        }
        if (i - value >= 0)
        {
            tableValues[Row][i-value] = 1;
        }
    }
}
}

int main()
{
int C, B, M;
cin>>C;
int integers[C];

for (int i = 1; i < C; ++i)
{
    cin>>integers[i];
}
cin>>B;
cin>>M;
integers[0] = B;
int tableValues[C][M + 1];
tableValues[0][B] = 1;
for (int i = 1; i < C; ++i)
{
    scanV(i, integers[i], M, tableValues);
}

return 0;
}

最佳答案

一个简单的解决方案是使用 vector 。考虑这个简单的例子:

#include <iostream>
#include <vector>

void f (std::vector<std::vector<int> > &v)
{
    for (int i = 0; i < 3; ++i)
        for (int j = 0; j < 3; ++j)
            v[i][j] = i * 3 + j;
}

int main()
{
    std::vector<std::vector<int> > v (3, std::vector<int> (3, 0));
    f (v);

    for (int i = 0; i < 3; ++i)
        for (int j = 0; j < 3; ++j)
            std::cout << v[i][j] << ' ';
}

在 main 中,创建了一个 2D 整数 vector (3x3)。构造函数显示了 3 个元素,所有元素都用一个整数 vector 初始化,这些元素又由 3 个初始化为 0 的元素创建。

然后, vector 通过引用传递给函数 f,函数 f 赋值递增。在 main 中打印 vector 时,它显示:

0 1 2 3 4 5 6 7 8

如您所见,它们的使用与普通数组非常相似,但它们实际上是包含的,并且可以使用 STL 轻松访问新级别的编程。

在 C++11 中,它们的使用变得更加熟悉。您可以按如下方式分配 vector :

std::vector<int> v0 = {2, 5};
std::vector<std::vector<int> > v1 { {1,2,3} , {4,5,6} , {7,8,9} };

请注意,对于多维 vector ,最好将其封装在某种具有底层一维 vector 类型的矩阵类中。

编辑:

下面是将一维和二维 vector 初始化为指定元素的示例。如上所示,这在 C++11 中很容易,但如果您已经有一个数组,它仍然非常快。

int a [5] = {1,2,3,4,5}; //normal
std::vector<int> v1 (a, a +5); //create using beginning and ending addresses of a

int b[3][3] = { {1,2,3} , {4,5,6} , {7,8,9} }; //normal
std::vector<std::vector<int> > v2; //empty vector

for (int i = 0; i < 3; ++i) //3 in first dimension
    v2.push_back (std::vector<int> (b [i], b [i] + 3)); //push a vector with the appropriate 3 elements of b onto the back of v2

要一次遍历一个元素,您可以这样做:

std::vector<std::vector<int> > v (3, std::vector<int> (3));

for (int i = 0; i < v.size(); ++i) //v.size() == 3
    for (int j = 0; j < v [i].size(); ++j)
        adjustElement (v [i][j]); //replace with what you need

关于c++ - 通过引用传递数组作为 C++ 中的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359720/

相关文章:

c++ - 在 C++ 中将十六进制转换为整数的最快方法是什么?

php - 将 C++ 程序作为 cronjob 运行时出现问题

c++ - C++ 的面向对象回调?

c++ - 多维数组内存存储概述

c++ - 初始化程序, union 的特定成员

c++ - 达到边界颜色时,洪水填充无法填充整个形状?

c++ - 忽略模板参数

c++ - 使用 ICEBuilder 将 ICE 文件转换为 C++

c++ - 原始指针和智能指针混合函数重载

c++ - 读取可能不完整的文件 C++