具有无限维度的 C++ 向量

C++ vector with unlimited dimensions

我正在为解释器制作解析树。这是我的树中节点的代码:

struct rtok {
    std::string type;
    std::string val;
};

struct rnode  {
    rtok tok;
    vector<rnode> child;
} node;

vector<rnode> ptree;

树一直有效,直到我尝试在 "node.child" 上使用 "push_back()",即 node.child[0].push_back();

"rtok" 只是我用来存储令牌的自定义结构,我只是为了使示例更完整才包含它。

我认为 node.child[0].push_back(); 不起作用的原因是因为保存解析树的基本向量 (ptree) 只有一维。所以我的问题是,有没有办法让 C++ 根据需要动态地向 ptree 向量添加新维度?

--编辑--

我省略了向向量添加新节点的函数:

void add_term(rtok tok) {
    rnode n;
    n.tok = tok;
    ptree.back().child.push_back(n);
}

node.child[0] 在您创建之前不存在。创建 node 后,node.child 将是一个空向量,因此访问第一个(通过 [0])是未定义的。

要使其正常工作,请给 child 一个初始大小或向其添加元素,然后使用它们:

node.child.push_back(rnode());
node.child[0].push_back(...);

我的错!我试图在不引用我的 node 结构的子元素的情况下将项目插入向量中。

即我是这样做的:

ptree.back().child[0].push_back(n);

我应该这样做的时候:

ptree.back().child[0].child.push_back(n);