更改二维向量中的一个元素会更改所有元素吗?

时间:2019-03-23 02:46:52

标签: c++ c++11 vector stdvector

我正在编写一个棋盘游戏,其中棋盘是一个二维矢量,其中包含一个Square对象,而Square中则包含一个Piece。使用嵌套的for循环,我正在8x8向量的每个插槽中初始化一个新的Square对象-但是,当我向一个Piece添加Square时,它会添加一个{{ 1}}到每个Piece。我认为,即使我每次都初始化一个新的Square,向量中的每个插槽也都只指向一个Square

我已经尝试过使用Square对象的二维向量以及Square指针的向量。目前,我正在使用指针向量:Square

vector<vector<Square*>> _board;

在另一个名为 // initializing an empty board _board = {{},{},{},{},{},{},{},{}}; // adding a new Square to each of the 8x8 slots string colorAlternator = WHITE; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { _board[i].push_back(new Square(colorAlternator, make_tuple(i,j))); if (colorAlternator == WHITE) { colorAlternator = BLACK; } else { colorAlternator = WHITE; } } } // placing a piece /* placePiece() is a function of Square * (p2Pieces.at(0) is a piece being pulled from elsewhere) */ _board[0][1]->placePiece(*p2Pieces.at(0)); 的函数中,它打印出电路板的可视化图像(不好意思的实现,很快将通过for循环进行修复!):

view()

这应该将每个for (int i = 7; i >= 0; i--) { cout << BORDER << endl; cout << i + 1 << " " << "| " << board[i][0]->displayToken() << " | " << board[i][1]->displayToken() << " | " << board[i][2]->displayToken() << " | " << board[i][3]->displayToken() << " | " << board[i][4]->displayToken() << " | " << board[i][5]->displayToken() << " | " << board[i][6]->displayToken() << " | " << board[i][7]->displayToken() << " | " << i + 1 << endl; } 都打印为空白,除了我将Square放入其中的那个之外-但它会将每个Piece打印为包含我刚刚的Square添加。

有什么想法导致向量中的每个广告位链接到相同的Piece? (或者甚至是正在发生什么?)

更新:这是SquareplacePiece()和类displayToken()中支持方法containsPiece()的实现:

Square

0 个答案:

没有答案