检查向量项是否为空

Check if vector item not null C++

本文关键字:是否 向量 检查      更新时间:2023-10-16

我有结构:

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->l(或r)为null,而不是init struct。

像这样?它将跳过您的NULL元素,以及vectorr成员的NULL值元素,并继续for循环。

node * itr = nodes.at(i);
if(!itr || !itr->r) continue;

要检查指针是否为空,只需使用:

itr->l == 0

如果为0,则为空。但是考虑使用智能指针,它们更安全。

你也应该考虑用标准的方法遍历你的向量,使用如下:

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)