gpt4 book ai didi

c++ - 制作板的拷贝

转载 作者:行者123 更新时间:2023-11-28 03:22:54 24 4
gpt4 key购买 nike

我正在尝试制作棋盘游戏,因为每一步都必须有效,所以我正在复制棋盘并进行移动,以便验证该移动是否有效。

首先,我将棋盘上的所有位置初始化为 0(遍历棋盘并将每个 p 设置为 0

 pair<int, int> p(y, x); 
board_[p] = 0;

这是抄板的方法

void Board::copy(Board & gb) {
for (int y = MIN_Y; y <= MAX_Y; ++y) {
for (int x = MIN_X; x <= MAX_X; ++x) {
pair<int, int> p(y, x);
if (gb.board_.at(p) != 0) {
board_[p] = new Pieces(*gb.board_.at(p)); // **where I am confused**
} else {
board_[p] = 0;
}
}
}
}

我在 Board 中的容器是:

map<pair<int,int>, Pieces*> board_;

现在在播放方法中,我复制了棋盘

unsigned int play(Board & b){
b.copy(*this);
}

我的问题:两者都是

board_[p] = new Pieces(*gb.board_.at(p)); //Pieces is a class I defined

board_[p] = gb.board_.at(p);

编译没有任何错误或警告。我应该使用哪一个?

最佳答案

两者都可能是正确的,但您可能想要第一个。第一个会将每个 Pieces 复制到新板 - 这称为深复制。第二个只会复制指向每个 Pieces 的指针,所以两个板都指向同一组 Pieces - 这是一个浅拷贝。

但是,这里还有一个更大的问题。您正在定义一个 copy 函数,但 C++ 为我们提供了执行此操作的语言功能 - 复制构造函数。您应该改为像这样定义一个函数:

Board::Board(const Board& other_board) {
// Copy everything from other_board to this board
}

你会像这样使用它:

Board board;
Board newBoard(b);

关于c++ - 制作板的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14968852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com