【发布时间】:2012-02-26 10:27:02
【问题描述】:
我想制作一棵树,它可以在每个节点中有一些子节点,但我不知道它们的数量。树必须在小内存中使用(没有额外数据)以恒定时间到每个节点进行编码。我坚信我将创建具有值和子属性(值是 int,子项是堆栈)和指向该树中每个节点的指针数组的类树。我的问题是制作这个数组。我怎样才能在没有额外数据的情况下(std::vector 有时分配的内存比它需要的更多)和每个单元格的恒定时间?
一切正常,但我还需要固定时间到每个节点。我知道会有多少个节点,但我不知道如何制作每个节点的数组。它应该像这样工作:
array[n];
要么:
*(数组+1)=n;
A_Node *array[0]= new A_Node(16);
A_Node *n = new A_Node(1);
array[0]->addChild(n);
array[1]=n;
【问题讨论】:
-
您需要能够对该树执行哪些操作?
-
添加节点,将子节点添加到节点,添加每个节点后,我将创建数组以平整这棵树(但不是直的)。
-
“孩子是堆栈”是什么意思?
-
std::vector分配更多内存,因为它希望为您节省多次对 malloc 的不确定性昂贵的调用(当您一次增长一个项目时)。如果你知道你的向量应该有一个固定的大小,你可以使用.reserve(size),并且你的树永远不会有比你在那里定义的更多的节点。 -
@Frg:您不想使用传递容量的构造函数吗?此外,reserve 确保向量至少具有指定的容量。再说一次,我不确定是否允许构造函数版本过度分配。