2012-04-29 71 views
3

假設我有一個具有數組成員的類。是否有可能在構造/定義其大小在運行時,以下列方式:如何在運行時定義成員數組大小

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

其中n是基於用戶輸入定義的變量。如果不是,那麼最好的選擇是什麼?

回答

2

使用一個載體。

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

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

然後,你可以像數組一樣填入向量。或者,正如Nawaz指出的那樣,使用reserve()(它爲新元素保留空間)和/或push_back(),這些元素一次一個添加到背面。

+0

爲什麼'resize()'?爲什麼不'reserve()'? – Nawaz

+0

@Nawaz,取決於你如何填寫它。可以工作,儘管你可以用'resize()'來填充它。 – chris

+0

如果使用'resize()',那麼爲什麼不使用mem-initializer-list作爲'myClass :: myClass(int size):myArray(size){}'。這個比較好。 – Nawaz

1

類模板std::vector是專門爲此目的而設計的。

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

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

這取決於。

在語義上,有3種類型的數組:

  • 陣列的尺寸固定在運行時用一個動態大小
  • 陣列具有固定在編譯時的尺寸

    • 陣列

      C++直接支持第一種和第三種情況,分別使用常規數組和std::vector類。

      C也支撐第二類型具有兩個構建體:

      • 可變長度陣列(在堆棧上)
      • 的過時的歌曲結構劈或尾填充

      我建議,在C++中,在你的情況下使用std::vector類。它提供的不僅僅是你所需要的,而且更易於使用。

      另一方面,即使在C++中,仍然可以使用尾部填充。它確實需要謹慎的工程。

  • 相關問題