2016-04-29 103 views
1

所以現在我有類對象的一個​​這樣的數組:如何將類對象的數組轉換爲向量數組?

ClassA* object1[10]; 
object1[0] = new ClassA(); 
object1[1] = new ClassA(); 

現在我想用schablone:

vector <ClassA> ver(10); 

我不知道這是否是正確的。模板,但我如何插入新的對象到主矢量數組中?

+0

你爲什麼不使用'新[]'實例1中? –

回答

2

怎樣在主要功能

ver已經包含10默認初始化的對象中插入新對象到這個矢量數組。所以你可以去開始使用這些對象。獎勵是你不需要刪除它。

可能使用ver[3].classAFunc();

如果對象的數量是固定的,在編譯時已知,std::array可能超過std::vector更好的選擇,在大多數情況下。

2

您可以通過pushing backemplacing 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的向量。

+0

謝謝你,但我正在尋找@Mohit Jain發佈的答案。 :) –

1

爲什麼你首先使用原始指針和原始動態數組?

的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 
相關問題