如何使用 for 循环将一维数组的值放入 C++ 中的二维数组

Posted

技术标签:

【中文标题】如何使用 for 循环将一维数组的值放入 C++ 中的二维数组【英文标题】:How to put the values of a 1D array into a 2D array in C++ using for loop 【发布时间】:2017-07-22 17:53:25 【问题描述】:

我想将一维数组的值放入二维数组。然后我想打印出二维数组的值。

我有以下代码:

#include <string.h>
#include <fstream>
#include <iostream>
#include <conio.h>          //for _kbhit
using namespace std;
#define MAX_N 100

#include<stdio.h>

int c[MAX_N] = 35, 23 , 56 , 30, 110 , 123 , 13 , 31 ;

int b[4][4];
int main()


    int i,j,k,l;
    for(i=0;i<8;i++)
     cout << c[i];
    cout << endl;

    for(i=0;i<4;i++)
       for(j=0;j<4;j++)
         
          b[i][j] = c[i];
         
    
    for(i=0;i<4;i++)
        
            for(j=0;j<4;j++)
                
                    cout << b[i][j] << " ";
                
        cout << "\n";   
        cout << "\n";
        
cout << "\n\nHit<enter> to finish";
while ( !_kbhit());
return (0);

输出应该是:

35 23 56 30
110 123 13 31 

有什么想法吗?

谢谢!

【问题讨论】:

我会先做一些数学。您的输出循环总共有 16 次写入。如果您期望只有 8 个 项,那么您的数学显然是错误的。 b[i][j] = c[i]; 很明显,对于任何x,所有b[i][x] 都将具有相同的值。 【参考方案1】:

设原数组为

int arr[] = 10, 20, 30, 40, 50, 60;

您可以选择所需的行数,以便可以将数组相应地分成二维。

int row;
cout << "Enter Number of rows: ";
cin >> row;

然后通过计算列数来初始化你的二维数组

int size = sizeof(arr)/sizeof(int);
int col = (int) ceil(size/row); // from math.h/cmath library
int array[row][col];

现在迭代并使用一维数组填充二维数组

int idx = 0;
for(int i=0; i<row; i++)
    for(int j=0; j<col && idx<size; j++) 
        array[i][j] = arr[idx++]; 

试运行

arr = [10, 20, 30, 40, 50, 60]

Enter Number of rows = 2

array = 10, 20, 30,
         40, 50, 60

编辑:idx&lt;size 在用一维数组填充二维数组的内部嵌套循环中。这样您就可以处理奇数大小的一维数组。

【讨论】:

所以,显然这可行,谢谢!我必须添加: int idx = 0;你能详细说明一下吗?那是如何工作的?任何 cmets 都会很有用。 Np 只是试着在副本上画出你的问题,这样你就可以了解更多关于问题的见解,然后勾选最有帮助的答案,以便其他人意识到这项任务已经完成已完成,人们不会检查此链接。很高兴我能帮上忙:) @AlPap array[i][j] = arr[idx++];i=0 j=0idx=0 表明每个人都指向索引的开头array[0][0] = arr[0] // 10,之后idx++ 递增idx 的值1,并且这种情况一直发生,直到数组完全填满。因此array[0][0] = arr[0] //10array[1][0] = arr[1] //20array[0][1] = arr[2] //30 ...array[2][2] = arr[5] //10【参考方案2】:

如果 c 有 16 个元素:

for(int i = 0, row = 0; row < 4; ++row)

    for(int column = 0; column < 4; ++i, ++column)
    
        b[row][column] = c[i];
    

【讨论】:

以上是关于如何使用 for 循环将一维数组的值放入 C++ 中的二维数组的主要内容,如果未能解决你的问题,请参考以下文章

C++ For 循环和数组混淆

根据一维数组中的值更改二维numpy数组中的某些值而无需for循环

matlab如何将一个一维数组从大到小排序

在一维数组中写维吉尼广场

python中如何将多个一维数组变成二维数组

使用两个for循环给二维数组赋固定值,并输出?