存储小指令列表的最佳方法是什么?

时间:2012-02-15 23:49:03

标签: c++ data-structures vala

我想用C ++或Vala做一个小型的人工生命模拟器。我无法决定如何编写基因类。一个基因由一组类似汇编的指令组成,这些指令存储在一个非常小的类中,如:

rnd 0 10
add .0 20
mov .0 $accel

首先,我应该使用数组的链表(std :: list还是std :: vector)?

其次,我应该将数组封装到类中还是公开?如果我选择前者,我将必须包含列表的许多功能。后者违反了封装。

3 个答案:

答案 0 :(得分:3)

  1. 几乎肯定是vector;一个list只会给你带来开销(根据使用的内存和导航列表所花费的时间),没有任何优势(我不认为你的基因需要在中间连续插入代码,甚至如此如果数据很小,则vector仍会获胜。

  2. 如果类的客户端需要几乎自由地操作指令列表,我认为封装它然后添加大量的小包装函数是没有用的。

答案 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)来表示指令。