我想用C++或Vala做一個小型人工生命模擬器。我無法決定如何編寫一個基因類。基因是由一組彙編樣的指令存儲在一個很小的類,像:什麼是存儲小指令列表的最佳方式?
rnd 0 10
add .0 20
mov .0 $accel
首先,我應該用聯陣列(STD ::清單或std ::向量)的名單?
其次,我應該將數組封裝到類中還是將其公開?如果我選擇前者,我將不得不包裝列表的許多功能。後者違反封裝。
我想用C++或Vala做一個小型人工生命模擬器。我無法決定如何編寫一個基因類。基因是由一組彙編樣的指令存儲在一個很小的類,像:什麼是存儲小指令列表的最佳方式?
rnd 0 10
add .0 20
mov .0 $accel
首先,我應該用聯陣列(STD ::清單或std ::向量)的名單?
其次,我應該將數組封裝到類中還是將其公開?如果我選擇前者,我將不得不包裝列表的許多功能。後者違反封裝。
幾乎肯定是vector
;一個list
只會給你開銷(在使用的內存和瀏覽列表的時間方面),給你沒有好處(我不認爲你的基因需要在中間連續插入代碼,即使如此,如果數據是小vector
仍然贏)。
如果這個類的客戶端需要幾乎自由地處理指令列表,我認爲沒有用它來封裝它,然後添加大量的小包裝函數。
如果你知道確切的數字或最大(比預期的不大得多)元素的數量,那麼你最好是使用的std::array<T>
(也有一個,如果你的不倒C++ 11還)。
元素的數量是不知道然後使用std::vector<T>
。
如果元素的數量很可能會經常變化,然後用std::deque<T>
,如果你想的指令集的容器,那麼你必須做出更多的預測。
,你可能最終與
std::deque<std::array<T, 4> > life_forms;
,如果您預計會頻繁增加生命形式和每一個生命形式究竟有4個指令具體情況將是一件好事。
注意我會非常不鼓勵使用列表,除非你想頻繁地刪除鏈接。
我寫了一個small genetic programming framework在vala。我剛剛使用了簡單的結構數組(op,p1,p2)來表示指令。
你有沒有考慮過使用數據庫? – 2012-02-15 23:51:07