C++ 初始化二维数组中的特定行和列时出现的问题

C++ 初始化二维数组中的特定行和列时出现的问题,c++,arrays,C++,Arrays,我有一个二维阵列和两个一维阵列 我需要从第一个1d数组中获取元素,并将它们存储在2d数组的前5行和前5列中 然后我需要从第二个1d数组中获取元素,并将它们存储在2d数组的其余行和列中 问题是元素没有正确输入,请查看底部的输出以理解我的意思 #include <iostream> #include <iomanip> using namespace std; const int ROWS = 10; const int COLUMNS = 4; void CopyAr

我有一个二维阵列和两个一维阵列

我需要从第一个1d数组中获取元素,并将它们存储在2d数组的前5行和前5列中

然后我需要从第二个1d数组中获取元素,并将它们存储在2d数组的其余行和列中

问题是元素没有正确输入,请查看底部的输出以理解我的意思

#include <iostream>
#include <iomanip>
using namespace std;

const int ROWS = 10; 
const int COLUMNS = 4;

void CopyArrays(int Array1[], int a1_Size, int Array2[], int a2_Size, int Array3[][COLUMNS]);

/* Array1[] refers to array1 a1_Size refers to the size of the first array, 
   Array2 refers to array2 and a2_Size refers to the size of array2, 
   And Array3[][COLUMNS] refers to the 2d array */


void DisplayArray3(int Array3[][COLUMNS]);

int main()
{
  int array1[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};

  int array2[20] = {2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40};

  int Array3[ROWS][COLUMNS];

  CopyArrays(array1, 20, array2, 20, Array3);

  DisplayArray3(Array3);       

  return 0;
}

void CopyArrays(int Array1[], int a1_Size, int Array2[], int a2_Size, int Array3[][COLUMNS])
{
   for (int i = 0; i < a1_Size; i++)
   {
       for (int j = 0; j < ROWS; j++)
       {
          for (int k = i; k < COLUMNS; k++)
          {
             Array3[j][k] = Array1[i];
          }
       }
    } 

}


void DisplayArray3(int Array3[][COLUMNS])
{ 
      for(int i = 0; i < ROWS; i++)
      { 
           for(int j = 0; j < COLUMNS; j++)
           {    
              cout << setw(10) << Array3[i][j];
           } 
        cout << "\n" ;
      } 
} 
因此,正如您所看到的,只有来自数组alpha的前四个元素被放入数组3,而不是1-20。有些地方我的逻辑有缺陷,但我不知道如何纠正它

有什么建议吗


PS:我意识到for循环可以压缩,我计划这样做,而且我没有将for循环设置为在第5行结束处理,因为此时我更关心的是数字范围是否正确。

三个嵌套循环不是这样做的方法。这可能会奏效:

void CopyArrays(int Array1[], int a1_Size, int Array2[], int a2_Size, int Array3[][COLUMNS])
{
    int i = 0;

    for ( ; i < a1_Size; i++)
        // indexing a 2D array with one variable
        Array3[i / COLUMNS][i % COLUMNS] = Array1[i];

    for (int j = 0; j < a2_Size; j++)
        Array3[(j + i) / COLUMNS][(j + i) % COLUMNS] = Array2[j];
}
void copyrays(int-Array1[],int-a1\u大小,int-Array2[],int-a2\u大小,int-Array3[][列])
{
int i=0;
对于(;i

我使用
(j+I)
在第一个循环结束后继续编写
数组3
的元素。

三个嵌套循环不是这样做的。这可能会奏效:

void CopyArrays(int Array1[], int a1_Size, int Array2[], int a2_Size, int Array3[][COLUMNS])
{
    int i = 0;

    for ( ; i < a1_Size; i++)
        // indexing a 2D array with one variable
        Array3[i / COLUMNS][i % COLUMNS] = Array1[i];

    for (int j = 0; j < a2_Size; j++)
        Array3[(j + i) / COLUMNS][(j + i) % COLUMNS] = Array2[j];
}
void copyrays(int-Array1[],int-a1\u大小,int-Array2[],int-a2\u大小,int-Array3[][列])
{
int i=0;
对于(;i

在第一个循环结束后,我使用
(j+I)
继续编写
Array3
的元素。

噢,哇,我完全偏离了基准,这是有道理的,尽管感谢您的回复,它确实解决了问题。我发现多维数组是一个让人头疼的问题。哦,哇,我完全偏离了基准,这是有道理的,不过谢谢你的回复,它确实解决了这个问题。我发现多维数组是个让人头疼的东西,哈哈。