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)
我尝试过这个,但没有任何反应.我做错了吗?
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)
除了循环中的反转逻辑(其他人提到),不需要第三个内循环.只需将归因放在第二个内循环中:
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()将无法工作.但那是另一个长篇故事......
看起来您的目标数组按行主顺序排列.您可以将源阵列直接爆炸到位.
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)