具有无限维度的 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);
我正在为解释器制作解析树。这是我的树中节点的代码:
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);