C++中的嵌套结构
Nested struct in C++
我尝试使用以下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_ptr
、shared_ptr
、reference_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::optional
和std::reference_wrapper
:
struct N { int value; std::optional<std::reference_wrapper<N>> left, right; };
不要使用引用。引用必须在初始化期间绑定,并且必须绑定到有效对象。因此,您的某些引用必然是无效的(因为树不是无限的(。
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 用C#中的并集模拟C++嵌套结构
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- Lambda 捕获、初始值设定项和嵌套结构
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 重载嵌套结构/类的流插入运算符
- C++将结构传递给函数以访问嵌套结构
- C++ 在外部使用嵌套结构实现类函数
- 嵌套结构,从由空行分隔的文件中读取数据
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 如何创建结构的结构结构,等等嵌套多个结构?
- 嵌套在联合中的结构嵌套在 C 中的结构中
- 受保护的嵌套结构不能用作派生外部类中的返回类型?
- C++中的嵌套结构
- 嵌套的模板结构构造函数实现
- 使用嵌套结构初始化并集
- C++ 中的嵌套结构函数
- C++中匿名类型的嵌套结构