我有一个数组,现在是静态的。这是我用它做的操作。 首先,我创建了一个二维数组。然后我用循环填写它。然后我将它发送到函数,其中还有使用的循环。 在这里,我想发布一些与我类似的示例代码。
bool picture[20][20]; //here's my array right now. Pretty ugly. Just for testing.
for (int y=0;y<Height;y++)
{
for (int x=0;x<Width;x++)
{
if (treshold<middle)
{
picture[x][y]=1;
}
else
{
picture[x][y]=0;
}
}
}
//Here's an example of filling an array
leftk = left(picture,widthk, heightk); //That's how I use a function
int left(int picture[200][200],int row,int col)
{
for (int x = 0; x <=row-1; x++)
{
for (int y = 0; y <=col-1 ;y++)
{
if (picture1[x][y]==1)
{
return x;
}
}
}
}
//And that's the function itself
所以在这里我需要将我的数组切换为动态数组。这就是我如何声明我的动态数组
bool** picture=new bool*[size];
for(int i = 0; i < size; ++i)
picture[i] = new bool[size];
//size is just a variable.
至于静态声明的周期,一切都很简单。将此数组作为参数发送到函数。
我已经设法创建了一个动态数组,这很简单。然后我用数字填写。这里也没问题。但是我无法理解,如何发送一个数组来运行,以及如何在那里使用它。 你能不能给我一个在函数中修改二维数组的例子。 对不起,这个新手问题。希望有人会帮忙。
顺便说一下,我认为课程包装会有点混乱。
答案 0 :(得分:4)
如下的功能:
Process2DArray(int **pArray, int rowCount, int colCount)
假设其正在操作的2D阵列,应该满足需要。另外,请考虑使用std::vector<std::vector<int>>
而不是手动分配的多维数组。这种方法有助于防止泄漏。第二种方法也让你有锯齿状阵列。
答案 1 :(得分:2)
通常的解决方案是将数组包装在一个类中; C不处理 数组非常好,而且C ++对2D数组没有任何真正的支持 它的库也是。所以你要定义:
class Array2D
{
std::vector<double> myData;
int myColumnCount;
int myRowCound;
// ...
};
带有使用i * myColumnCount +
j
转换两个索引的访问器,或者:
class Array2D
{
std::vector<std::vector<double> > myData;
// ...
};
使用初始化逻辑确保所有行都具有相同的行 长度。第一个通常更简单,更容易理解;如果你 想要增加列数,但第二个是 更容易。
答案 2 :(得分:1)
您有几种选择:
int
,int **a
应该能够容纳n
数组new int *[n]
,然后使用for
通过它们并初始化它们a[i] = new int[elems_per_line]
int *a = new int[n * elems_per_line]
1}} a[i * elems_per_line + j]
,其中element(i,j) - 0-based实际上是{{1}}。希望这有帮助。