C ++ 2D数组到1D数组

时间:2013-11-11 18:48:58

标签: c++ arrays multidimensional-array

我正在尝试将2D数组转换为1D。 我是C / C ++的新手,但我认为学习如何将2D数组转换为1D非常重要。 所以我在这里遇到了这个问题。

到目前为止,我的代码是     http://ideone.com/zvjKwP

#include<iostream>

using namespace std;

int main()
{

int n=0,m=0; // 2D array nRow, nCol
int a[n][m];
int i,j; // цикъл въвеждане 2D
int q,p,t; // for 2D=>1D
int b[100];
int r; // for cout
cout<<"Enter the array's number of rows and columns: ";
cin>>n>>m;

// entering values for the 2D array
    for (i = 0;i<=n;i++)
    {
        for (j = 0;j<=m;j++)
        {
            cout<<"a["<<i<<"]["<<j<<"]="<<endl;
            cin>>a[i][j];
            cin.ignore();
        }
    }

  // Most likely the failzone IMO
  for (q = 0;q<=i;q++)
    {
        for (t = 0;t<=i*j+j;t++)
        {
            b[t] = a[i][j];
        }
    }
    // attempting to print the 1D values
     cout<<"The values in the array are"<<"\n";
    for(r=0;r<=t;r++)
    {
        cout<<"b["<<r<<"] = "<<b[r]<<endl;
    }

    cin.get();
    return 0;
    }

我写了一条评论,我认为我失败了。

我还必须将进入1D的数字限制为值^ 2大于50的数字。 但是我肯定必须通过转换2D =&gt; 1D解决问题 你能救我一下吗?

4 个答案:

答案 0 :(得分:4)

http://www.cplusplus.com/doc/tutorial/arrays/

在该链接中查看伪多维数组的部分。

我见过很多让下标算法错误的例子。如果有疑问,请追踪它。子脚本编写2D数组的顺序应该从0-(HEIGHT * WIDTH-1)开始顺序

#define WIDTH 5
#define HEIGHT 3

int jimmy [HEIGHT * WIDTH];
int n,m;

int main ()
{
  for (n=0; n<HEIGHT; n++)
    for (m=0; m<WIDTH; m++)
    {
      jimmy[n*WIDTH+m]=(n+1)*(m+1);
    }
}

答案 1 :(得分:3)

你的想法是正确的:

周期应该是:

for (q = 0; q < n; q++)
{
    for (t = 0; t < m; t++)
    {
        b[q * n + t] = a[q][t];
    }
}

从更高维数组的角度考虑这种转换总是更容易。此外,使用您的代码,您实际上并未在i分配周期中修改jb,因此您不应期望将不同的值分配给{{1}的不同数组成员}。

答案 2 :(得分:1)

此代码

int n=0,m=0; // 2D array nRow, nCol
int a[n][m];

无效。首先,维度应该是常量表达式,将它们设置为0是没有意义的。

执行任务的更简单方法是使用指针。例如

int *p = b;

for ( const auto &row : a )
{
    for ( int x : row ) *p++ = x;
}

答案 3 :(得分:0)

首先,1D数组的大小应为n*m

循环可以如下 -

int lim = n*m;

for(q = 0; q<lim; ++q) {

    b[q] = a[q/m][q%m];
}