0

struct Vanish空の値でのベクトルを初期化する最良の方法を尋ねていた、以前に尋ねた質問を参照します。

assign() の使用は、構造体の C++ ベクトルを初期化する良い方法ですか?

私は答えを受け入れました:

BigClass::BigClass()
: tovanish(MAX_VANISH)
{

}

struct Vanish私の質問は、 のベクトルのベクトルをクラス ( ) のメンバーとして初期化したいのですBigClassが、今回Vanishは値 {3,3} でそれぞれを初期化する場合です。私は持っている:

std::vector<std::vector<Vanish>> vanish_vectors;

私のコンストラクタで私が試した:

BigClass::BigClass():
    vanish_vectors(NUM_COLUMNS, (NUM_ROWS, (3,3)))
  {

  }

VanishNUM_COLUMNS ベクトルを作成する意図があり、各ベクトルでは、値 {3, 3} に初期化された構造体の NUM_ROWS になります。

デバッガーを使用すると、実際に NUM_COLUMNS ベクトルが作成されることがわかりました。ただし、これらの各ベクトルには 3 つの構造体が含まVanishれており、すべてゼロになっています。

Vanishこれらの構造体を値で初期化する最良の方法は何ですか?

4

1 に答える 1

1

これが私が慣れていない構文でない限り、あなたが試したのは実際にはコンマ演算子を使用しているため、 に(NUM_COLUMNS, (NUM_ROWS, (3,3)))なり(NUM_COLUMNS,3)、ベクトルを構築する値として 3 を渡します (これにより、ベクトルのコンストラクターが int で呼び出され、デフォルトで初期化された 3 つの要素のベクトル)

あなたがする必要があるのはこれだと思います:

// C++11
vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, {3,3}))

// or for older C++ (you will also need to give Vanish a constructor)
vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, Vanish(3, 3)))

// or (as noted in the comments) to keep Vanish as POD in pre-C++11:
vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, makeVanish(3, 3)))
// with a function like this:
Vanish makeVanish( int a, int b ) {
    Vanish thing;
    thing.a = a;
    thing.b = b;
    return thing;
}

値を初期化するためのベクトルを送信し、そのベクトルには、値を初期化するための値 3、3 を持つ構造体が含まれています。

于 2013-06-08T21:54:13.773 に答える