Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的递归容器+;?_C++_Recursion_Containers - Fatal编程技术网

C++ C+中的递归容器+;?

C++ C+中的递归容器+;?,c++,recursion,containers,C++,Recursion,Containers,可能重复: 我最近浏览了一些代码,发现一个类似于以下内容的数据结构: class TreeNode { std::vector<TreeNode> subNodes; }; 类树节点{ 向量子节点; }; 如您所见,在定义TreeNode之前,容器是用TreeNode实例化的。代码可以在GCC和MSVC下编译,但我记得看到有人说这不是保证的行为。不幸的是,我在标准中找不到任何讨论这一点的内容 如何实现这些容器?标准是否保证这种行为?如果标准不能保证这一点,我有什么其他的

可能重复:

我最近浏览了一些代码,发现一个类似于以下内容的数据结构:

class TreeNode {
    std::vector<TreeNode> subNodes;
};
类树节点{
向量子节点;
};
如您所见,在定义TreeNode之前,容器是用TreeNode实例化的。代码可以在GCC和MSVC下编译,但我记得看到有人说这不是保证的行为。不幸的是,我在标准中找不到任何讨论这一点的内容


如何实现这些容器?标准是否保证这种行为?如果标准不能保证这一点,我有什么其他的设计方案

这很好,因为
std::vector
类中不包含任何类型
t
的具体实例:它通常使用指针实现。模板实例化
std::vector
不需要
TreeNode
的完整定义

std::vector
通常作为三元组指针实现(尽管标准不要求这样做):


刚才有一个问题就是这样的。。现在我必须找到它!这很有趣,但是当
include
ing vector时,完整的
std::vector
实现不是必须被引入吗?在这种情况下,不需要知道类型的大小吗?实现如何解决这个问题?你说得对,所以我不会投反对票,但标准规定,对标准库模板的模板参数使用不完整的类型会导致未定义的行为,所以从技术上来说,答案是“不,你不能这样做。”
template <typename T>
class vector
{
  ...
  T* start;
  T* end;
  T* end_of_storage;
};
template <typename T>
class container
{
  T x;
};

class TreeNode
{
  container<TreeNode> subNodes;
};