使用线性数组(stl向量)或stl deque完成树实现的优点或缺点是什么
而不是一个具有左右指针的单个节点的二叉树?
假设:树将被预先计算并且一旦构建就不会被修改,并且只会用于搜索。
使用线性数组(stl向量)或stl deque完成树实现的优点或缺点是什么
而不是一个具有左右指针的单个节点的二叉树?
假设:树将被预先计算并且一旦构建就不会被修改,并且只会用于搜索。
好吧,我会说它是这样的:
std::vector
分配内存(容器处理自身的迭代)std::vector
,你的记忆是本地化的。例如,如果你想访问一棵树的单个完整级别,这将在内存中是连续的,而单独分配的各个节点,你会像兔子一样跳过内存访问所有这些malloc
-euqivalent 函数的大量调用。(在C中有一些技巧可以用来避免这种情况,它们仍然可以C++
在std::vector
.std::vector.reserve()
来预分配所有内存。此外,如果您知道向量是如何操作的,您就会知道它会在malloc
每次启动树的新级别时调用 -equivalent 来保留内存 - 分配的数量应该大致等于树中的级别数