0

連続して2つの質問をしてすみません。

オブジェクトのベクトルをインスタンスデータとして宣言してから、コンストラクターでそのサイズを初期化します。

  class Test
    {
    private:
        std::vector<Object_I_madeup> myVector;
        int n;
    public:
         Test(int n):
           n(n)
        {
            myVector(n); //Intending to set the size of the vector to n entries
        }

Javaで.setSize()を見つけようとしましたが、resize()を使用する必要があるのではないかと疑っています。これは簡単な質問ですが、これを行うための最良の方法は何ですか?

ありがとう

4

3 に答える 3

3

イニシャライザに追加します。

Test (int n):
    myVector(n), n(n) {}

nメンバーはクラスに表示される順序で初期化されるため、前に配置する必要があることに注意してください。同様に、nメンバーがベクトルのサイズを追跡するだけの場合は、myVector.size()代わりに使用することもできます。また、無効な値を使用する場合は、もう少し厳密にする必要があります。ここでは、誰かが-5などを渡す可能性があり、それらを停止することはありません。これはテストだと思いますが、符号なしパラメーターの方が良いと思います。Edが指摘しているように、使用するsize_tのが最善のオプションです。これは、ベクトルがそのサイズ(std::vector<T>::size_type)に使用するものと同等だからです。

于 2012-08-30T19:59:10.123 に答える
0

の場合と同じように、メンバー初期化子リストを使用しますn。ベクトルはそのサイズを知っているので、を格納する必要さえありませんnmyVector.size()必要なときに使うことができます。

class Test
{
private:
    std::vector<Object_I_madeup> myVector;
public:
     Test(int n):
       myVector(n) {}
};
于 2012-08-30T19:59:22.713 に答える
0

なぜサイズを別々に作成するのですか?ベクトルは、それが持っている要素の数を常に教えてくれます。その情報の保存は冗長です。初期化リストで初期化する必要があります。

class Test {
public:
    Test(size_t size) : myVector(size) { }
private:
    std::vector<Object_I_madeup> myVector;
};

intを使用することにより、ベクトルの上限を人為的に制限していることに注意してください。

于 2012-08-30T19:59:40.770 に答える