你好,我正在自己的tic-tac-toe項目上工作。我不參加編程課,所以它不做功課。tictactoe和複製一個數組
我已經寫了相當多的代碼的其餘部分,現在正在AI上工作。
對於AI我打算拿它的一個副本(2維數組),並檢查它是否可以在移動中獲勝,如果玩家可以,那麼如果它可以在2步移動,那麼球員等等,還有一些其他的東西我會包括在內。所以爲了做到這一點,我想我需要傳遞數組的副本,但我不知道如何複製數組。所以這基本上是我的問題,你如何複製一個數組?
你好,我正在自己的tic-tac-toe項目上工作。我不參加編程課,所以它不做功課。tictactoe和複製一個數組
我已經寫了相當多的代碼的其餘部分,現在正在AI上工作。
對於AI我打算拿它的一個副本(2維數組),並檢查它是否可以在移動中獲勝,如果玩家可以,那麼如果它可以在2步移動,那麼球員等等,還有一些其他的東西我會包括在內。所以爲了做到這一點,我想我需要傳遞數組的副本,但我不知道如何複製數組。所以這基本上是我的問題,你如何複製一個數組?
你可以用數組爲一類,在這種情況下,它會被默認生成的拷貝構造函數和賦值操作符自動複製:
enum EField { empty, cross, oh };
typedef std::array<EField, 9> TTTBoard; // C++11, or use std::tr1::array
或手動做到這一點:
struct TTTBoard
{
EField data[9]; // or even EField data[3][3]
};
現在你可以隨意複製:
TTTBoard b;
TTTBoard c = b;
我得到了struct的最後一部分,但我不太清楚枚舉是什麼或typedef。 – 2012-03-04 22:25:20
+1至於關於'std :: vector'的問題,我只關心複製的簡易性。 – hmjd 2012-03-04 22:25:57
@PatrickKennedy:一旦你花更多的時間閱讀你最喜歡的C++書籍,你肯定會得到這些問題的答案! – 2012-03-04 22:26:11
一個絕招,你可以沒有conce使用陣列複製自己創建一個類型爲您的3x3板:
struct TicTac{
int board[3][3];
}
而只是將其作爲參數傳遞給您的函數。
嗯好吧,它會更容易複製? – 2012-03-04 22:23:08
@PatrickKennedy這種方式複製是在Kerrek提示時自動完成的。 – 2012-03-04 22:24:00
啊我看到了,謝謝澄清。所以我只是通過對象,它會被自動複製。但是,這是否意味着我不想要副本時我必須通過它的地址? – 2012-03-04 22:27:25
你有什麼樣的陣列? 我假設你有普通的舊學校整數數組。
當您有: int Array [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];
}
}
我有地方老井字遊戲劇本,讓我再找找吧。
編輯:找到它:
下面是相關的主題:
我有一個char數組 – 2012-03-04 22:31:31
在這種情況下代碼是一樣的:) – 2012-03-04 22:41:01
是否有您所選擇的陣列超前'的std ::矢量一個原因>'? –
hmjd
2012-03-04 22:16:04
嗯,我是新來編程,我還沒有進入矢量,但我聽說過他們。你會推薦他們通過數組? – 2012-03-04 22:18:47
@hmjd:由於董事會具有固定的,靜態已知的大小,動態數據結構似乎不合適。 – 2012-03-04 22:20:41