用另一个替换多维数组?

时间:2016-12-26 15:40:29

标签: c++ arrays multidimensional-array replace char

我制作2D游戏来训练我的班级管理。

我有两个多维数组:Map1Map。我想将Map值替换为Map1个值。如何在不用Map[0][0] = '#'等手动替换每个元素的情况下执行此操作。

char Map[10][21] = {
    "####################",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "####################"};

char Map1[10][21] = {
"####################",
"#                  #",
"#                  #",
"#                  #",
"#                  #",
"#       TEST       #",
"#                  #",
"#                  #",
"#                  #",
"####################"};

4 个答案:

答案 0 :(得分:1)

由于保证多维数组在内存布局中是连续的,并且两个数组具有相同的大小,您可以这样做:

std::copy((char*)Map1, (char*)Map1 + sizeof(Map1), (char*)Map);

请注意,必须使用强制转换才能将整个副本作为char数组生成。

另一方面,如果您使用std::vector<std::string>,则此任务会更直接,您可以直接指定:Map = Map1 ...

答案 1 :(得分:0)

我个人不会写这样的代码,而是用于测试......

int main( )
{
    for( size_t i= 0; i < 10; ++i )
        std::cout << Map[ i ] << std::endl;

    memcpy( Map, Map1, sizeof( Map ) );

    for( size_t i= 0; i < 10; ++i )
        std::cout << Map[ i ] << std::endl;
}

答案 2 :(得分:0)

只需利用类的内置副本分配:

struct map {
    char Map[10][21];
};

map Map = { 
    "####################",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "####################"
};

map Map1 = {
    "####################",
    "#                  #",
    "#                  #",
    "#                  #",
    "#                  #",
    "#       TEST       #",
    "#                  #",
    "#                  #",
    "#                  #",
    "####################"
};

int main()
{
    Map = Map1;
}

答案 3 :(得分:0)

Instead of copying them, maybe it is more successful to exchange its contents, this can be done using std::swap

swap(Map,Map1);