3

配列であるメンバーを持つクラスがあるとしましょう。次のように、構築時/実行時にそのサイズを定義することは可能ですか?

class myClass {
    private:
        int myArray[n]
    public:
        myClass();
        someOtherMethod();
};

ここで、nはユーザー入力に基づいて定義される変数です。そうでない場合、最良の選択肢は何でしょうか?

4

3 に答える 3

10

場合によります。

意味的には、3つのタイプのアレイがあります。

  • コンパイル時にサイズが固定された配列
  • 実行時にサイズが固定された配列
  • 動的サイズの配列

C ++は、通常の配列とstd::vectorクラスで、それぞれ1番目と3番目のケースを直接サポートします。

Cは、2つの構成を持つ2番目のタイプもサポートします。

  • 可変長配列(スタック上)
  • oldiestructhackまたはtail-padding

C ++では、このstd::vectorクラスを使用することをお勧めします。必要以上のものを提供しますが、使い方は簡単です。

一方、C ++でも、テールパディングを使用できます。ただし、注意深いエンジニアリングが必要です。

于 2012-04-29T18:11:19.477 に答える
4

ベクトルを使用します。

class myClass {
    private:
        std::vector<int> myArray;
    public:
        myClass();
        someOtherMethod();
};

myClass::myClass (int size)
    : myArray (size)
{ 
    ...
}

次に、配列と同じようにベクトルを入力できます。または、Nawazが指摘しているように、reserve()新しい要素用のスペースを予約する、および/またはpush_back()要素を一度に1つずつ背面に追加するを使用します。

于 2012-04-29T17:37:33.213 に答える
1

クラステンプレートstd::vectorは、この目的のために設計されています。

class myClass {
    private:
        std::vector<int> myArray;
    public:
        myClass(int size);
        someOtherMethod();
};

myClass::myClass(int size) : myArray(size)
{
}
于 2012-04-29T17:36:51.060 に答える