复制构造函数 [数组] C++
copy constructor [array] C++
所以我正在做一个益智游戏,我遇到了一个问题。我的董事会将在程序的稍后部分被打乱。我想在它被打乱之前制作一份副本,以便在我的游戏获胜条件下使用它。我的想法是每次用户移动磁贴时,将复制的板与打乱的板进行比较,以查看它们是否成功(获胜)。但是我有点不确定如何为板做复制构造函数。这是我所做的(没有按预期工作)。
Board::Board(int userInput)
{
this->gameSize = userInput;
int zeroPos[2] = { 0, 0 };
SetTileNumbers();
}
void Board::SetTileNumbers()
{
const int sizeOfGame = gameSize; //Size given from user when the board was created.
int tileNumber = 0; //The value given to each Tile.Number.
int row, column;
boardOfTiles = new Tile* [sizeOfGame];
for (int i = 0; i < sizeOfGame; i++)
{
boardOfTiles[i] = new Tile [sizeOfGame]; //The doublepointer is given an additional dimension
}
for (row = 0; row < sizeOfGame; row++)
{
for (column = 0; column < sizeOfGame; column++)
{
boardOfTiles[row][column].number = tileNumber; //Loops that goes through the entirety to instantiate the board of tiles.
tileNumber++;
}
}
}
void Board::SetTileNumbers(const Board& copy)
{
const int sizeOfGame = copy.gameSize;
int row , column;
boardOfTiles = new Tile*[sizeOfGame];
for (int i = 0; i < sizeOfGame; i++)
{
boardOfTiles[i] = new Tile[sizeOfGame];
}
for (row = 0; row < sizeOfGame; row++)
{
for (column = 0; column < sizeOfGame; column++)
{
boardOfTiles[row][column].number = copy.boardOfTiles[row][column].number;
}
}
}
我希望
这听起来不是题外话,但除了复制构造函数之外,我认为您可能遇到不同的问题:您决定解决方案的方式非常低效。你浪费了CPU的时间,你浪费了内存。
对于比较两个NxN板的每一步都是无效的。您可以尝试不同的方法:为板上的每个位置分配一个数字,您知道解决方案是按特定顺序对数字进行排序。
对于 3x3 板,"THE"解决方案如下所示:
1 2 3
4 5 6
7 8 9
此外,2d 数组作为连续数组存储在内存中,您可以将解决方案视为数组:
1 2 3 4 5 6 7 8 9
任何其他安排都不代表解决办法。检查数组排序的天气是一个更容易解决的问题。最坏的情况是,您仍在查看 O(n^2) 以检查数组是否已排序但没有内存开销。另外,我相信您可以找到一种更有效的算法来检查数组是否排序。
我希望这有帮助...
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '