我想用C ++或Vala做一个小型的人工生命模拟器。我无法决定如何编写基因类。一个基因由一组类似汇编的指令组成,这些指令存储在一个非常小的类中,如:
rnd 0 10
add .0 20
mov .0 $accel
首先,我应该使用数组的链表(std :: list还是std :: vector)?
其次,我应该将数组封装到类中还是公开?如果我选择前者,我将必须包含列表的许多功能。后者违反了封装。
答案 0 :(得分:3)
几乎肯定是vector
;一个list
只会给你带来开销(根据使用的内存和导航列表所花费的时间),没有任何优势(我不认为你的基因需要在中间连续插入代码,甚至如此如果数据很小,则vector
仍会获胜。
如果类的客户端需要几乎自由地操作指令列表,我认为封装它然后添加大量的小包装函数是没有用的。
答案 1 :(得分:1)
如果你知道确切的数字或最大数量(比预期的要多得多)元素数量那么你最好使用std::array<T>
(如果你还没有使用C ++ 11那么也有一个)。
不知道元素的数量,然后使用std::vector<T>
。
如果元素数量可能经常变化,请使用std::deque<T>
如果你想要一组容器的指令,那么你必须做出更多的预测。
你最终可能
std::deque<std::array<T, 4> > life_forms;
如果您希望经常添加生命形式并且每个生命形式都有4条指令,那么特殊情况就会很好。
注意我非常不鼓励使用列表,除非您想要经常“删除”链接。
答案 2 :(得分:1)
我在vala中写了small genetic programming framework。我刚刚使用简单的结构数组(op,p1,p2)来表示指令。