3

ベクトルであるメンバーを持つ構造体があるとします。コンストラクターでは、NULL に設定したいだけです。しかし、後でプッシュバックできるようにしたいと思います。ベクトルが NULL になった後、どうすればベクトルを初期化できますか?

struct structName {
    vector<int> vec;
    structName() {
        vec = NULL
    }
    void set(int);
}

void structName::set(int n) {
    // What do I put here?
    vec.push_back(n);
}

助けてくれてありがとう!

4

4 に答える 4

3

デフォルトのコンストラクターを介して既に初期化されており、別のコンストラクターを呼び出す必要がある場合は、初期化リストを使用してください。

これはC++であり、Java / C#などではないことを忘れないでください。オブジェクトがnullであることは意味がありません(これらの言語でもそうではありませんが、読み進めてください)。それは起こり得ない。Javaおよびそのような言語では、オブジェクトへの参照である変数があり、それらの参照(オブジェクトではありません!)はnullである場合とそうでない場合があります。

これはC++には当てはまりません。オブジェクトとそれらを参照するポインタの間には厳密な描写があります(そして、ポインタ、またはもちろん、ポインタはnullであるか、無効なメモリ位置を参照する可能性があります)。

于 2012-10-31T22:45:03.267 に答える
0

ベクターのデフォルトのコンストラクターは、ベクターを最も単純な状態、つまりコンテンツなしに設定します。だからそれを放っておいてください。

于 2012-10-31T22:43:29.007 に答える
0

ベクトルをNULLに初期化しても意味がありません。おそらく、ポインタと混同されています。ベクトルを空のベクトルに初期化したい場合、それは自動的に行われます。言い換えれば、このように

struct structName {
    vector<int> vec;
    structName() {
    }
    void set(int);
}

void structName::set(int n) {
    vec.push_back(n);
}
于 2012-10-31T22:44:38.387 に答える
0

Javaの場合と同じようにC++オブジェクトについて考えていると思います。しないでください彼らは完全に異なる獣です。

C ++では、オブジェクトはJavaのように参照ではないため、オブジェクトをnullにすることは意味がありません。実際、試行vec = NULLはエラーでNULLあり、実際には0です。

代わりに、行vec = NULLを削除するだけで、そのまま機能します。ベクトルはデフォルトで空として構築され、他の初期化を行う必要はありません。

于 2012-10-31T22:45:40.227 に答える