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

时间:2014-10-23 01:39:21

标签: c++ vector constructor

自从我接触到C ++以来已经有几年了,而且我在应该做一件容易的事情时遇到了一些困难。我有VectorObject个对象。 Object构造函数接受X和Y坐标。对于Object中的每个Vector,我想用伪随机坐标实例化它。但是,我似乎无法使下面的代码适合我。任何帮助将不胜感激。

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;

2 个答案:

答案 0 :(得分:2)

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,否则roll your own)。

如果你的图书馆不支持unique_ptr,那么请更新为有效的内容。

答案 1 :(得分:2)

objects.reserve(nObjects);
for(int i = 0; i < nObjects; ++i)
    objects.emplace_back(rand(), rand(), rand(), rand());

请注意,您不能同时resizepush_backemplace_back