所以現在我有類對象的一個這樣的數組:如何將類對象的數組轉換爲向量數組?
ClassA* object1[10];
object1[0] = new ClassA();
object1[1] = new ClassA();
現在我想用schablone:
vector <ClassA> ver(10);
我不知道這是否是正確的。模板,但我如何插入新的對象到主矢量數組中?
所以現在我有類對象的一個這樣的數組:如何將類對象的數組轉換爲向量數組?
ClassA* object1[10];
object1[0] = new ClassA();
object1[1] = new ClassA();
現在我想用schablone:
vector <ClassA> ver(10);
我不知道這是否是正確的。模板,但我如何插入新的對象到主矢量數組中?
怎樣在主要功能
ver
已經包含10
默認初始化的對象中插入新對象到這個矢量數組。所以你可以去開始使用這些對象。獎勵是你不需要刪除它。
可能使用ver[3].classAFunc();
如果對象的數量是固定的,在編譯時已知,std::array
可能超過std::vector
更好的選擇,在大多數情況下。
您可以通過pushing back或emplacing back來添加它們。例如:
std::vector<ClassA*> objects;
objects.push_back(new ClassA());
object1.push_back(new ClassA());
或者你可以使用一個初始化列表:
std::vector<ClassA*> objects{{new ClassA(), new ClassA()}};
你仍然需要記得刪除的對象。
更好的辦法是擁有一個shared_ptrs的向量。
謝謝你,但我正在尋找@Mohit Jain發佈的答案。 :) –
爲什麼你首先使用原始指針和原始動態數組?
的C++方法來創建在第一行中的動態陣列將是以下:
std::vector<ClassA*> object1(10);
這產生在它10個空指針的載體。
接下來的兩行可能是相同的,但是您仍然有手動管理對象的對象生命週期和內存的問題。讓我們來解決,通過使用智能指針:
std::vector<std::unique_ptr<ClassA>> object1(10);
object1[0] = std::make_unique<ClassA>();
object1[1] = std::make_unique<ClassA>();
根據不同的情況下,你可能不會需要整整10元,最後8是空指針的向量。如果你想在矢量僅包含實際設置的元素,那麼不分配的初始大小的矢量和剛推的對象,你實際上可以有:
std::vector<std::unique_ptr<ClassA>> object1; //empty vector
object1.push_back(std::make_unique<ClassA>()); //now has 1 element
object1.push_back(std::make_unique<ClassA>()); //now has 2 elements
而且作爲最後的改進,除非你真的需要有是在矢量指針(例如,因爲你必須多態元素),只需使用對象的矢量,而不是指針:
std::vector<ClassA> object1; //empty vector
object1.push_back(ClassA{}); //now has 1 element
object1.push_back(ClassA{}); //now has 2 elements
你爲什麼不使用'新[]'實例1中? –