2016-04-29 116 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