自从我接触到C ++以来已经有几年了,而且我在应该做一件容易的事情时遇到了一些困难。我有Vector
个Object
个对象。 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;
答案 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());
请注意,您不能同时resize
和push_back
或emplace_back