如何将在 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/