假設我有一個具有數組成員的類。是否有可能在構造/定義其大小在運行時,以下列方式:如何在運行時定義成員數組大小
class myClass {
private:
int myArray[n]
public:
myClass();
someOtherMethod();
};
其中n是基於用戶輸入定義的變量。如果不是,那麼最好的選擇是什麼?
假設我有一個具有數組成員的類。是否有可能在構造/定義其大小在運行時,以下列方式:如何在運行時定義成員數組大小
class myClass {
private:
int myArray[n]
public:
myClass();
someOtherMethod();
};
其中n是基於用戶輸入定義的變量。如果不是,那麼最好的選擇是什麼?
使用一個載體。
class myClass {
private:
std::vector<int> myArray;
public:
myClass();
someOtherMethod();
};
myClass::myClass (int size)
: myArray (size)
{
...
}
然後,你可以像數組一樣填入向量。或者,正如Nawaz指出的那樣,使用reserve()
(它爲新元素保留空間)和/或push_back()
,這些元素一次一個添加到背面。
類模板std::vector
是專門爲此目的而設計的。
class myClass {
private:
std::vector<int> myArray;
public:
myClass(int size);
someOtherMethod();
};
myClass::myClass(int size) : myArray(size)
{
}
這取決於。
在語義上,有3種類型的數組:
C++直接支持第一種和第三種情況,分別使用常規數組和std::vector
類。
C也支撐第二類型具有兩個構建體:
我建議,在C++中,在你的情況下使用std::vector
類。它提供的不僅僅是你所需要的,而且更易於使用。
另一方面,即使在C++中,仍然可以使用尾部填充。它確實需要謹慎的工程。
爲什麼'resize()'?爲什麼不'reserve()'? – Nawaz
@Nawaz,取決於你如何填寫它。可以工作,儘管你可以用'resize()'來填充它。 – chris
如果使用'resize()',那麼爲什麼不使用mem-initializer-list作爲'myClass :: myClass(int size):myArray(size){}'。這個比較好。 – Nawaz