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

时间:2015-02-17 10:56:03

标签: c++ vector compiler-construction interpreter abstract-syntax-tree

我正在为翻译做一个解析树。以下是我树中节点的代码:

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

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

vector<rnode> ptree;

树直到我尝试使用&#34; push_back()&#34; on&#34; node.child&#34;即node.child[0].push_back();

&#34; rtok&#34;我只是用来存储令牌的自定义结构,我只包含它以使示例更完整。

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

- 编辑 -

我省略了向向量添加新节点的功能:

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

2 个答案:

答案 0 :(得分:2)

在您创建

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

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

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

答案 1 :(得分:0)

我的坏!我试图将项目插入到向量中,而不引用我的node结构的子元素。

即。我这样做了:

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

当我应该这样做时:

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