2008-10-19 51 views
2

我正在實施一個BFS,它要做的是通過一個有序的樹來找到一個難題的最短解決方案。C++中的對象的變量命名方案?

我將要做的是創建一個Snapshot對象,它保存拼圖中每個部分的當前位置。我將把這個Snapshot對象添加到隊列中,並檢查它是否是解決方案。但是,我正在創建這些快照。那麼是否有某種方式在將它們放入隊列時自動生成Snapshot對象的名稱?

還是我必須說來跟蹤多少聲明我已經和剛剛硬編碼...

快照snapshot2; 快照快照3; 快照快照4; 等。

回答

1

有一種方法 - 你使用Preprocessor's Token-Pasting Operator。這使您可以根據變量創建一個名稱,所以你指定:

#define S(variable) snapshot#variable 

和你能夠創建變量命名snapshot1,snapshot2等:

Snapshot S(1) 
Snapshot S(2) 

然而,我我不確定這是你真正想要的,我可能曾經在實踐中使用過這種技術,那是代碼生成器。

0

您可以使用標準模板庫中的隊列,然後創建一個函數來創建一個Snapshot對象並放入隊列中。給這個函數一個靜態變量,每次被調用並寫入快照的id字段時都會增加。

http://www.csci.csusb.edu/dick/samples/stl.html

http://www.cppreference.com/wiki/stl/queue/start

+0

但問題是,當我創建快照對象,只是使用某種通用名稱,如 快照快照; 我將其添加到隊列中。現在,因爲我將使用循環,它會使用相同的名稱來聲明它。它會讓我這樣做嗎? – Tomek 2008-10-19 03:39:24

+0

如果你在循環中聲明它,它應該在每次迭代時重新創建。 – jeffythedragonslayer 2008-10-19 03:40:45

0

我認爲,我們需要的更多信息。如果你只是將這些排除在隊列之外,你爲什麼關心他們的名字?隊列中的對象通常不會被編號,除非您在數組中實現它。

0

對不起,整個隊列的事情有點引起混亂。

再舉一個例子。所以對於這個謎題,謎題中的棋子數量由用戶指定。我設計程序的方式是,每個難題都是它自己的對象。

所以當我開始創建這些Pieces時,我可以使用某種變量命名方案來命名這些Pieces。所以這樣的事情只是作爲一個例子...

for (int i-0; i < constraint; i++) 
Piece "Piece"+i = new Piece(); 
0

在C++中不能動態地創建變量名,至少在沒有一些(假想的?)插件。

編輯:順便說一下,我做了一個任務,我假設它與AI類中的類似,其中我們介紹了BFS,DFS和A *等基本知識。沒有必要爲「快照」擁有唯一命名的對象,並且我使用了隊列。

edit2:如果您需要跟蹤您擁有多少快照,請創建一個每次創建對象時都會遞增的計數變量。

+0

是的,我想到了一些,你的權利沒有必要 – Tomek 2008-10-19 05:07:36

4

我想你問的是,如果你不知道會有多少物體,你是如何創建和保存很多物體的。您需要創建一個對象數組。然後你可以作爲快照[1],快照[2] ...快照[i]訪問它們。