我制作2D游戏来训练我的班级管理。
我有两个多维数组:Map1
和Map
。我想将Map
值替换为Map1
个值。如何在不用Map[0][0] = '#'
等手动替换每个元素的情况下执行此操作。
char Map[10][21] = {
"####################",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"# #",
"####################"};
char Map1[10][21] = {
"####################",
"# #",
"# #",
"# #",
"# #",
"# TEST #",
"# #",
"# #",
"# #",
"####################"};
答案 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);