C++ tictactoe和复制数组

C++ tictactoe和复制数组,c++,C++,你好,我正在自己做一个井字游戏项目。我没有上编程课,所以不是家庭作业 我已经写了剩下的代码,现在正在研究人工智能 对于AI,我将让它复制一个(二维数组),它检查它是否能在一个移动中获胜,然后如果玩家能,然后如果它能在两个移动中获胜,然后是玩家,等等,我将包括一些其他的东西。因此,为了做到这一点,我认为我需要传递数组的副本,但我不确定如何复制数组。这就是我的问题,如何复制数组 您可以将数组包装到类中,在这种情况下,默认生成的复制构造函数和赋值运算符将自动复制该数组: enum EField { e

你好,我正在自己做一个井字游戏项目。我没有上编程课,所以不是家庭作业

我已经写了剩下的代码,现在正在研究人工智能


对于AI,我将让它复制一个(二维数组),它检查它是否能在一个移动中获胜,然后如果玩家能,然后如果它能在两个移动中获胜,然后是玩家,等等,我将包括一些其他的东西。因此,为了做到这一点,我认为我需要传递数组的副本,但我不确定如何复制数组。这就是我的问题,如何复制数组

您可以将数组包装到类中,在这种情况下,默认生成的复制构造函数和赋值运算符将自动复制该数组:

enum EField { empty, cross, oh };

typedef std::array<EField, 9> TTTBoard;  // C++11, or use std::tr1::array
现在,您可以随意复制它:

TTTBoard b;
TTTBoard c = b;

您可以将数组包装到类中,在这种情况下,默认生成的复制构造函数和赋值运算符将自动复制该数组:

enum EField { empty, cross, oh };

typedef std::array<EField, 9> TTTBoard;  // C++11, or use std::tr1::array
现在,您可以随意复制它:

TTTBoard b;
TTTBoard c = b;

不必担心阵列复制的一个巧妙技巧是为3x3板创建一个类型:

 struct TicTac{
    int board[3][3];
 }

只需将其作为参数传递给函数。

不必担心阵列复制的一个巧妙技巧是为3x3板创建一个类型:

 struct TicTac{
    int board[3][3];
 }

然后将其作为参数传递给函数。

您有什么类型的数组? 我假设你有一个普通的老式整数数组

如果您有: int数组[3][3]

然后,要将其内容复制到另一个数组,必须循环每个元素。 可以这样做:

int MyArray[3][3];
int CopyHere[3][3];
for(int i = 0; i < sizeof(MyArray); ++i)
{
    for(int j = 0; j < sizeof(MyArray[i]); ++j)
    {
        CopyHere[i][j] = MyArray[i][j];
    }
}
int-MyArray[3][3];
int CopyHere[3][3];
对于(int i=0;i
我有一个古老的提克塔克脚本,让我找一下

编辑:找到它:

以下是相关主题:


你们有什么样的阵列? 我假设你有一个普通的老式整数数组

如果您有: int数组[3][3]

然后,要将其内容复制到另一个数组,必须循环每个元素。 可以这样做:

int MyArray[3][3];
int CopyHere[3][3];
for(int i = 0; i < sizeof(MyArray); ++i)
{
    for(int j = 0; j < sizeof(MyArray[i]); ++j)
    {
        CopyHere[i][j] = MyArray[i][j];
    }
}
int-MyArray[3][3];
int CopyHere[3][3];
对于(int i=0;i
我有一个古老的提克塔克脚本,让我找一下

编辑:找到它:

以下是相关主题:



你在
std::vector
之前选择数组有什么原因吗?我是编程新手,虽然听说过vector,但还没有接触过vector。你会推荐它们而不是数组吗?@hmjd:由于电路板具有固定的静态已知大小,因此动态数据结构似乎不合适。不,如果大小或多或少都很小,并且大小是编译时常量,那么数组就完全可以了。(每个维度的速度都比第一个维度快得多。)有什么原因让你在
std::vector
之前选择了一个数组吗?我是编程新手,我还没有接触到向量,尽管我听说过向量。你会推荐它们而不是数组吗?@hmjd:由于电路板具有固定的静态已知大小,因此动态数据结构似乎不合适。不,如果大小或多或少都很小,并且大小是编译时常量,那么数组就完全可以了。(而且比第一个维度后的向量快得多。)嗯,好的,复制会更容易吗?@PatrickKennedy这样,复制会像Kerrek暗示的那样自动完成。啊,我明白了,谢谢你澄清了这一点。所以我只需要传递对象,它就会被自动复制。但这是否意味着当我不想要副本时,我必须传递它的地址?@PatrickKennedy是的,但除非你真的需要改变来源,否则不要对副本皱眉
void f(TicTac&boardthat可以更改)
hmm好的,复制会更容易吗?@PatrickKennedy这样复制会自动完成,就像Kerrek提示的那样。啊,我明白了,谢谢你澄清了这一点。所以我只需要传递对象,它就会被自动复制。但这是否意味着当我不想要副本时,我必须传递它的地址?@PatrickKennedy是的,但除非你真的需要改变来源,否则不要对副本皱眉<代码>空格F(TcTac和BoADeCabBechange)< /C> >我得到了最后一个Strut部分,但我不太清楚EnUM是什么,或者TyWuff.+1至于关于代码> STD::向量< /代码>我只关心拷贝的方便性。@ PATRKKENEDY:一旦你花几个小时阅读你最喜欢的C++书籍,你肯定会找到这些问题的答案!我得到了最后一部分的结构,但我不太知道EnUM是什么或TyPuf.+1至于问题关于代码> STD::向量< /代码>我只关心简单的复制。@ PaTrkknnyDy:一旦你花几个小时阅读你最喜欢的C++书籍,你肯定会有答案的那些问题!