C++中的嵌套结构

Nested struct in C++

本文关键字:结构 嵌套 C++      更新时间:2023-10-16

我尝试使用以下struct声明编写一个程序:

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

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

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

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;
};

我想我明白你的目标是什么。您需要一个能够识别其邻居的结构。在这种情况下,请改用指针。

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

在您的情况下,编译器正在尝试生成您的结构,但由于无限递归而无法生成: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; };

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