3

テンプレートクラスを作成するときに何が起こっているのか、私はやや困惑しています。構築中にメンバ vector_ の容量を 50 (1 回だけ) に設定しようとしていますが、容量が適切に設定されていないようで、どうすればよいのかわかりません。関連するコードのスニペットとコンソール出力を含めました。ご協力ありがとうございました!

ベクターのテンプレート クラス:

template <typename T>
class V
{
  public:
    V()
    {
      std::cout << "capacity 1 = " << this->vector_.capacity() << "\n";
    };
    V(int capacity)
    {
      this->vector_.reserve(capacity);
      std::cout << "capacity 2 = " << this->vector_.capacity() << "\n";
    };
    int capacity() const { return this->vector_.capacity(); };
  private:
    std::vector<T> vector_;
};

初期化される R のコンストラクター:

R::R()
{
  std::cout << "capacity 0 = " << this->s_.capacity() << "\n";
  this->s_ = V< std::vector< std::complex<float> > >(50);
  std::cout << "capacity 3 = " << this->s_.capacity() << "\n";
};

R クラスのヘッダー:

class R
{
  public:
    R();
  private:
    V< std::vector< std::complex<float> > > s_;
};

コンソールへの出力:

capacity 1 = 0
capacity 0 = 0
capacity 2 = 50
capacity 3 = 0
4

1 に答える 1

4

のサイズではstd::vector<T>なく、その容量を設定します。容量は顕著な属性ではないstd::vector<T>ため、コピーされません。resize()を使用してサイズを設定する必要があります。

于 2013-01-01T20:56:36.793 に答える