【发布时间】:2015-04-02 13:09:59
【问题描述】:
我的情况如下:
template<size_t Level>
class Node
{
public:
Node()
{
for (size_t i = 0; i < children.size(); i++)
children[i].reset(new Node<Level - 1>());
}
array<unique_ptr<Node<Level - 1>>, 4> children;
};
template<>
class Node<0>
{
};
...
Node<2> root;
我需要创建一个节点树,其中每个节点,但最后一个(级别 = 0),有 4 个子节点。我想将孩子存储在std:array 的std::unique_ptr 中。
我的解决方案是正确的还是我做错了什么?有更聪明的方法来实现这个结果?
【问题讨论】:
-
好像可以直接使用
std::array<Node<Level - 1>, 4>。 -
@Jarod42 仅在理论上,如果不使用指针,我无法拥有太深的层次。
-
如果这确实是您想要实现的目标,那没关系。如果您打算对这 4 个子项中的任何一个使用编译时(而不是运行时)索引,则可以考虑将
std::array<Node,4>更改为std::tuple<Node,Node,Node,Node>。 -
@Ethouris 看来 OP 可能会将其超出通常适合自动存储的范围,因此使用
std::unique_ptr的原因。std::array<Node,4>在评论中;不是问题。例如,没有指针的 10 层深的树将消耗大约 27MB 的自动存储空间,这比大多数预留的实现要大得多。 -
@Ethouris 同质
std::tuple与std::array相比几乎没有优势,std::array也可以与std::get等一起使用。
标签: c++ arrays c++11 unique-ptr