繁体   English   中英

如何将类对象数组转换为向量数组?

[英]How do I transform array of class objects into vector array?

所以现在我有一个像这样的类对象数组:

    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更好选择。

您可以通过后退嵌入来添加它们。 例:

std::vector<ClassA*> objects;
objects.push_back(new ClassA());
object1.push_back(new ClassA());

或者,您可以使用初始化列表:

std::vector<ClassA*> objects{{new ClassA(), new ClassA()}};

您仍然需要记住删除对象。

最好是有一个shared_ptrs向量。

为什么首先要使用原始指针和原始动态数组?

在第一行中创建动态数组的C ++方法如下:

std::vector<ClassA*> object1(10);

这将创建一个包含10个空指针的向量。

接下来的两行可能是相同的,但是仍然存在手动管理对象寿命和ClassA对象的内存的问题。 让我们通过使用智能指针来解决此问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM