在C++中将One Dimensional Arrary转换为Two Dimensional

Cis*_*ran 5 c++ arrays int dimensional

我有一个49空间一维数组声明为int boardArray [49];,我也有一个二维7x7数组声明,因为int boardArrayTwo [7][7]'我试图使用嵌套for循环将一维数组投入二维数组这里是我用来测试它的代码.

for (int i = 0; i > 50; ++i)
{
    boardArray[i] = i; //fills the array with ints 0 - 48 to test
}
for (int x = 0; x >= 7; ++x)
{
    for (int k = 0; k >= 7; ++k)
    {
        for (int n = 0; n >= 49; ++n)
        {
            boardArrayTwo[x][k] = boardArray[n];
            cout << boardArrayTwo[x][k] << " " << endl;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过这个,但没有任何反应.我做错了吗?

Hei*_*bug 7

for (int x = 0; x >= 7; ++x)
{
    for (int k = 0; k >= 7; ++k){
         for (int n = 0; n >= 49; ++n)
    {
Run Code Online (Sandbox Code Playgroud)

这是错的.x和k应<7(不应使用第三个循环):

for (int x = 0; x < 7; ++x)
{
    for (int k = 0; k < 7; ++k){
        boardArrayTwo[x][k] = boardArray[7*x + k];
Run Code Online (Sandbox Code Playgroud)

编辑:

像@Fabio Ceconello在他的评论中让我注意到,即使第一个循环是错误的,因为反转条件检查,它应该这样修改:

for (int i = 0; i < 49; ++i)
{
    boardArray[i] = i; //fills the array with ints 0 - 48 to test
}
Run Code Online (Sandbox Code Playgroud)


Fab*_*llo 5

除了循环中的反转逻辑(其他人提到),不需要第三个内循环.只需将归因放在第二个内循环中:

boardArrayTwo[x][k] = boardArray[x * 7 + k];
Run Code Online (Sandbox Code Playgroud)

编辑:我还应该提到所有这些文字都不是很好的做法,我在上面添加了一个(7).我重写代码如下:

#define arrlen(x) (sizeof(x)/sizeof((x)[0]))

for (int i = 0; i < arrlen(boardArray); ++i)
{
    boardArray[i] = i; 
}
int stride = arrlen(boardArrayTwo[0]);
for (int x = 0; x < arrlen(boardArrayTwo); ++x)
{
    for (int k = 0; k < stride; ++k)
    {
        boardArrayTwo[x][k] = boardArray[stride * x + k];
        cout << boardArrayTwo[x][k] << " " << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

警告:如果未在此处声明数组(作为参数传递),则arrlen()将无法工作.但那是另一个长篇故事......


Bla*_*ace 5

看起来您的目标数组按行主顺序排列.您可以将源阵列直接爆炸到位.

memcpy(boardArrayTwo, boardArray, 49 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

或者如果你更喜欢更惯用的C++中的东西:

std::copy(boardArray, boardArray + 49, reinterpret_cast<int*>(boardArrayTwo));
Run Code Online (Sandbox Code Playgroud)