用不同的对象实例化c++Vector

instantiating c++ Vector with different objects

本文关键字:实例化 c++Vector 对象      更新时间:2023-10-16

我已经有几年没有接触C++了,我在本应轻松的任务上遇到了一些困难。我有一个VectorObject对象。CCD_ 3构造函数采用X和Y坐标。对于Vector中的每个Object,我想用psuedo随机坐标实例化它。然而,我似乎无法使下面的代码为我工作。任何帮助都将不胜感激。

Image::Image(unsigned nObjects)
{
  srand(2);
  this->nObjects = nObjects;
  objects.resize(nObjects);
  for(int i = 0; i < nObjects; ++i)
  {
      objects.insert(new Object(rand(), rand(), rand(), rand()));
  }
}

以下是如何在图像头文件中实例化矢量:

std::vector<Object> objects;
objects.reserve(nObjects);
for(int i = 0; i < nObjects; ++i)
    objects.emplace_back(rand(), rand(), rand(), rand());

请注意,不能同时使用resizepush_backemplace_back

new返回一个指针,您有一个Object值的向量,而不是指向Object的指针。您不需要在堆上显式地分配Object(除非您将以多晶型方式使用Object),使用将项目添加到vector

objects.push_back(Object(rand(), rand(), rand(), rand()));

如果objects是派生实例的集合,则需要使用以下

std::vector<std::unique_ptr<Object>> objects;

并使用添加项目

objects.push_back(std::make_unique<Some_derived_class>(rand(), rand(), rand(), rand()));

(如果您的库支持make_unique,则可以自己滚动)。

如果您的库不支持unique_ptr,请更新到支持的内容。