2016-12-26 14 views
1

私はクラス管理を訓練するために2Dゲームを作っています。多次元配列を別の配列に置き換える?

私は2つの多次元配列:Map1Mapを持っています。 Mapの値をMap1の値に置き換えます。私は、などMap[0][0] = '#'のように手動ですべての要素を交換せずにこれをどのように行うことができます

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

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

答えて

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; 
} 
0

はジャスト内蔵のコピーを活用クラスの割り当て:

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

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

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

int main() 
{ 
    Map = Map1; 
} 
1

多次元アレイは、メモリレイアウトで連続であることが保証及び二つの配列が同じを持っているのでキャストはcharの配列として全体のコピーを作成する必要があると

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

注:サイズ、あなたはこれを行うことができます。

一方、このタスクは、あなたがstd::vector<std::string>を使用した場合、あなたは直接割り当てることができ、より直接的だっただろう:Map = Map1を...

0

の代わりにそれらをコピーし、多分その内容を交換するより成功している、このを使用して行うことができます。std::swap

swap(Map,Map1);