如何将类对象数组转换为向量数组
How do I transform array of class objects into vector array?
所以现在我有一个类对象数组,如下所示:
ClassA* object1[10];
object1[0] = new ClassA();
object1[1] = new ClassA();
现在我想使用schabolone:
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
相关文章:
- 如何在C++中将数组转换为矢量指针
- 将C++中的数组转换为字符串
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 将 int 数组转换为 std::vector<int*>
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 将字符数组转换为时间结构
- 将字节数组转换为多维数组
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- C++如何将字符数组转换为字节向量(向量<byte>)
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 将 int 数组转换为带有小数C++的双精度数组
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- 将字符数组转换为整数值