0

私は構造を持っています:

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構造体ではない場合があります。どうすればこれを確認できますか?

4

2 に答える 2

1

このようなもの?NULL要素、およびのメンバーのNULL値を持つ要素をスキップし、ループを続行します。rvectorfor

node * itr = nodes.at(i);
if(!itr || !itr->r) continue;
于 2012-12-21T02:13:42.897 に答える
0

ポインタがnullかどうかを確認するには、次を使用します。

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)
于 2012-12-21T02:16:27.777 に答える