检查向量项是否为空C

时间:2012-12-21 02:11:13

标签: c++ vector

我有结构:

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。我怎么检查这个?

2 个答案:

答案 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)