填充数组数组

时间:2013-05-28 11:12:28

标签: c++ arrays

这是我的代码:

#include <cstdlib>
#include <stdio.h>

using namespace std;

int main(int argc, char** argv) {

    int a[] = {0,1,2,3,4,5,6,7};
    int array_grande[3][8];

    for(int m=0; m<3; m++) {
        for(int i=0; i<8; i++) {
                array_grande[m] = a[i];
        }
    }

    return 0;
}

我已经将array_grande声明为一个有3个位置且每个位置为8个整数的数组,所以我想要的是一个数组数组。

array_grande = {{0,1,2,3,4,5,6,7},{0,1,2,3,4,5,6,7},{0,1,2,3,4,5,6,7}}

我制作的代码不起作用,我想这是因为array_grande的第二个索引。任何人都可以帮我一把吗?我想尽可能地保留代码。提前致谢

5 个答案:

答案 0 :(得分:8)

array_grande[m] = a[i];

你可能想要

array_grande[m][i] = a[i];

或者您可以使用copy标题中的函数algorithm

std::copy(std::begin(a), std::end(a), array_grande[m]);

另一种方法是使用std::array

std::array<int, 8> a{{0,1,2,3,4,5,6,7}};
std::array<std::array<int, 8>, 3> array_grande;

for(auto& elem: array_grande)
    elem = a;

或者,更简单:

std::array<int, 8> a{{0,1,2,3,4,5,6,7}};
std::array<std::array<int, 8>, 3> array_grande{{a, a, a}};

答案 1 :(得分:2)

有几种方法可以实现您的目标:

#include <cstdlib>
#include <stdio.h>
#include <memory.h>

int main(int argc, char** argv) {

    int a[] = {0,1,2,3,4,5,6,7};
    int array_grande[3][8];
    int array_grande_2[3][8] = { {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7} };
    int array_grande_3[3][8];
    int array_grande_4[3][8];

    for(int m=0; m<3; m++) {
        for(int i=0; i<8; i++) {
                array_grande[m][i] = a[i];
        }
    }

    for(int m=0; m<3; m++) {
        for(int i=0; i<8; i++) {
                array_grande_3[m][i] = i;
        }
    }

    for(int m=0; m<3; m++) {
        memcpy(&array_grande_4[m], a, 8 * sizeof(int));
    }

    return 0;
}

答案 2 :(得分:1)

如果你看看你的内心任务:

array_grande[m] = a[i];

您将inta[i])分配给指向int(array_grande[m])的数组或指针。您只需按如下方式进行更改:

array_grande[m][i] = a[i];

答案 3 :(得分:1)

#include <cstdlib>
#include <stdio.h>

using namespace std;

int main(int argc, char** argv) {

    int a[] = {0,1,2,3,4,5,6,7};
    int array_grande[3][8];

    for(int m=0; m<3; m++) {
        for(int i=0; i<8; i++) {
                array_grande[m][i] = a[i];
        }
    }

    return 0;
}

你需要在数组中添加[i],因为它是一个2 d数组。

by array_grande [m]它仍然是一个1 d数组,所以你需要添加[]以便使相同维度的tham

答案 4 :(得分:1)

int a[] = {0,1,2,3,4,5,6,7};

a[i]代表0 1

之类的整数
int array_grande[3][8];

您创建一个int的2D数组。

array_grande[0] -> | | | | | | | | | 
array_grande[1] -> | | | | | | | | |
array_grande[2] -> | | | | | | | | |

array_grande[i]已有一个地址,因为它是一维数组。您无法为其分配a[i]

您需要引用每行中的位置来存储值。

for(int m=0; m<3; m++) 
{
    for(int i=0; i<8; i++) 
    {
            array_grande[m][i] = a[i];
    }
}

即。 *(array_grande[m] + i) = a[i]获取行并前进至i th 位置