C ++中的嵌套结构

时间:2018-08-17 12:01:40

标签: c++ struct

我试图编写一个带有以下struct声明的程序:

struct N
{
    int value;
    N Left;
    N Right;
};

如果可能的话,我的程序中将有无数个结构。我仍然希望我的 Left Right 具有与N完全相同的结构。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:5)

要构建树状结构,可以使用指针:

struct N {
    int value;
    N *left;
    N *right;
};

您还可以使用参考:

struct N {
    int value;
    N &left;
    N &right;
};

但是通过这种方式,您需要在没有分支(或没有分支)的元素中仔细绑定引用。

或其他间接类型:unique_ptrshared_ptrreference_wrapper

此外,您还可以有一堆子裁判:

struct N {
    int value;
    std::vector<std::reference_wrapper<N>> branches;
};

答案 1 :(得分:2)

我认为我正在实现您的目标。您需要一个了解其邻居的结构。在这种情况下,请改用指针。

struct N
{
    int value;
    N* Left;
    N* Right;
};

答案 2 :(得分:2)

您的情况是编译器正在尝试生成您的结构,但由于无限递归而无法:sizeof(N) = sizeof(int) + sizeof(N)

解决此问题的一种方法是使用指向N的指针。现在,定义了sizeof(N) = sizeof(int) + 2*sizeof(N*)

struct N { int value; N *left, *right; };

如果您使用的是C++17,也可以使用std::optionalstd::reference_wrapper

struct N { int value; std::optional<std::reference_wrapper<N>> left, right; };

请勿使用引用。 引用必须在初始化期间绑定,并且必须绑定到有效对象。因此,您的某些引用注定是无效的(因为树不是无限的)。