【问题标题】:Copying 1 dimension of a 2-dimensional array to another part of the same array将二维数组的一维复制到同一数组的另一部分
【发布时间】:2015-01-03 23:06:00
【问题描述】:

我是 C++ 新手。

给定一个二维数组,定义为:

boolean myArray[3][8];

我想shuffle周围第一维元素中的单元格,例如,myArray[2][........] 被复制到myArray[2][........]

我通常会使用复制每个单元格的 嵌套循环 遍历数组。有一个更好的方法吗?换句话说,有没有办法通过某种单一命令将二维数组的单个维度复制到该数组的另一部分?

【问题讨论】:

  • boy I hope I haven't made this unintelligible - 好吧,如果您的源和目标不相同...
  • 您可以执行memcpy(myArray[0], myArray[2], 8); 之类的操作来从 1 复制到另一个。你要找的是那种东西?

标签: c++ arrays


【解决方案1】:

In this example 程序声明了以下二维 int 数组(而不是 bool):

3 5 7 9 11 13 15 17 
8 7 6 5 4 3 2 1 
2 4 6 8 10 12 14 16 

并演示如何在第一个和最后一个索引之间切换数据:

#include <stdio.h>
#include <string.h>

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

    // Copy data from index 2 to index 0
    int bkup[8] = { 0 };
    memcpy(bkup, myArray[0], sizeof(myArray[0]));
    memcpy(myArray[0], myArray[2], sizeof(myArray[2]));
    memcpy(myArray[2], bkup, sizeof(bkup));

    // Print array content to the screen
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 8; j++)
            printf("%d ", myArray[i][j]);
        printf("\n");
    }      

    return 0;
}

输出:

2 4 6 8 10 12 14 16 
8 7 6 5 4 3 2 1 
3 5 7 9 11 13 15 17 

【讨论】:

  • 只需将数组的数据类型更改为 bool 并使用truefalse 进行初始化即可。
  • C++11起,可以直接做std::swap(myArray[0], myArray[2]);
  • 非常感谢。我新会有办法。这就是我要找的。​​span>
【解决方案2】:

你可以使用:

memmove(&myArray[2], &myArray[2][2], 4);

将第二个数组中的一些字节复制到自身的开头。

【讨论】:

  • 如果您需要它来重叠内存,例如在第二个“不要这样做”部分中,我认为您最好坚持使用循环并手动执行 - 这样您可以确保内存完整性。
  • memmove(&myArray[2], &myArray[2][2], 4 * sizeof(boolean)) 来救援!
  • @FRob 好电话,我以前从未见过memmove,但看起来它就是为了这个目的。我编辑了我的答案以反映使用它。
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
相关资源
最近更新 更多