我有结构:
struct node
{
bool data;
node* l;
node* r;
node(bool data_) : data(data_), l(0), r(0) {}
};
像这样循环
void printNode(std::vector<node*> nodes, int level, int max_level)
{
for (int i = 0; i < nodes.size(); i++) {
node * itr = nodes.at(i);
if (itr->data != 2) {
cout << itr->data;
newNodes.push_back(itr->l);
newNodes.push_back(itr->r);
} else {
newNodes.push_back(new node(2));
newNodes.push_back(new node(2));
cout << " ";
}
printWhitespaces(betweenSpaces);
}
}
有时候itr-&gt; l(或r)为null,而不是init struct。我怎么检查这个?
答案 0 :(得分:1)
这样的东西?它会跳过NULL
元素以及NULL
成员r
的{{1}}元素,并继续vector
循环。
for
答案 1 :(得分:0)
要检查指针是否为空,只需使用:
itr->l == 0
如果为0则为null。但考虑使用智能指针,它们更安全。
您还应该考虑以标准方式迭代矢量,使用类似的东西:
std::vectoc<node*>::iterator
it = nodes.begin(),
ite = nodes.end();
for(; it != ite; ++it) {
...
}
最后你应该像这样通过引用传递你的矢量:
void printNode(std::vector<node*>& nodes, int level, int max_level)