使用std :: deque和其他容器的递归结构

时间:2015-01-13 07:49:25

标签: c++ containers c++14 incomplete-type

我开始定义树节点。在定义“children”字段时,这是不完整的类型(struct / class)。或者另一种方法是使用类型擦除,但它在我的脑海里是丑陋的。另一种方法是使用指针,但它仍然不是我想要的东西。所以我尝试通过标准容器库的容器实现它:vector(< => default priority_queue),deque(< =>默认堆栈,队列),list,forward_list,set,multiset。由于在标准库/ STL中缺乏准备使用的散列组合器,无序的关联容器并不令人感兴趣。顺便说一句,关联容器也没有意思,因为它的密钥无法修改。

#include <iostream>
#include <vector>
#include <deque>
#include <list>
#include <forward_list>
#include <set>

#include <cstdlib>

struct R;

using V = std::deque< R >;

struct R
{

    int i;
    V v;

};

int
main()
{
    R r;
    V v;
    return EXIT_SUCCESS;
}

Compile, link and run. to

代码编译所有容器(甚至是set和multiset),除了deque(当然还有堆栈,队列):错误说,deque internals使用的是value_type的大小(至于我可以推断,要定义内存块大小并匹配系统页面大小。)

在实际标准中是否有要求不依赖于元素类型完整性来实现容器?是否使用该容器的未定义行为,成功地在上面的代码中进行了编译?或者我还能依靠他们的正确性吗?

0 个答案:

没有答案