我想在運行時用用戶定義的大小創建一個類的對象。 就像用戶輸入5一樣,它會創建5個對象。 我想這用C++創建一類用戶定義大小的對象
student s[num];
for(int i=0;i<num;i++)
{
student s[i]; // also used student s[i]=new student();
}
但它說student s[num]
表達式必須具有恆定值。 那麼如何做到這一點?
我想在運行時用用戶定義的大小創建一個類的對象。 就像用戶輸入5一樣,它會創建5個對象。 我想這用C++創建一類用戶定義大小的對象
student s[num];
for(int i=0;i<num;i++)
{
student s[i]; // also used student s[i]=new student();
}
但它說student s[num]
表達式必須具有恆定值。 那麼如何做到這一點?
A std::vector
就是爲此目的而製作的。 (基本上是動態分配的數組)它有一個構造函數取元件的數量來預分配和構造:
#include <vector>
std::vector<student> students(num);
你也可以遍歷它作爲一個正常的數組:
for(unsigned int i = 0; i < students.size(); ++i)
{
//students[i]..
}
或者,如果您可以訪問C++ 11使用基於範圍的循環:
for(auto const& student : students)
{
//student..
}
或者,這是迭代器:
for(std::vector<student>::iterator itr = students.begin(); itr != students.end(); ++itr)
{
//access with *itr..
}
也許使用'students.at(i)'而不是'students [i]'來獲得運行時間邊界檢查。 –
@AaronMcDaid我們使用'我
我知道,但我仍然認爲沒有人應該在矢量上使用'[]'。允許它是一個壞習慣。如果我在教C++,我甚至不會提到它的存在! :-) –
或者,您可以動態分配和取消分配。如果你新[]不要忘記刪除[]!
#include <iostream>
struct MyObj {
float a;
float b;
};
int main() {
int num = 10;
MyObj* objs = new MyObj[num];
for(int i = 0; i < num; i++) {
objs[i].a = i;
objs[i].b = i*2;
}
std::cout << objs[3].a << " * 2 = " << objs[3].b << std::endl;
delete [] objs;
return 0;
}
中通常將'at()'轉換爲'[]'應該最後刪除所有對象,或者在它們不再使用時立即刪除它們。 或者是否有像C#.net一樣的C++垃圾收集器? –
沒有垃圾回收。如果你不刪除一個對象,你會引入內存泄漏。每當你完成它,你應該刪除這個對象。只要有邏輯意義,以確保在刪除它之前通過重新分配其指針來避免丟失一塊內存。 – Chemistpp
'的std ::矢量 S(NUM);' –
更像'ArrayList'。 –
vector s(num);說不完整的類型不允許。 –