实例化c++;不同对象的向量 自从我接触C++以来,已经有几年了,我有点困难,应该是一个简单的任务。我有一个向量的对象对象。对象构造函数采用X和Y坐标。对于向量中的每个对象,我想用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())); } } Image::Image(未签名的nobject) { srand(2); 此->nObjects=nObjects; 对象。调整大小(nObjects); 对于(int i=0;i

实例化c++;不同对象的向量 自从我接触C++以来,已经有几年了,我有点困难,应该是一个简单的任务。我有一个向量的对象对象。对象构造函数采用X和Y坐标。对于向量中的每个对象,我想用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())); } } Image::Image(未签名的nobject) { srand(2); 此->nObjects=nObjects; 对象。调整大小(nObjects); 对于(int i=0;i,c++,vector,constructor,C++,Vector,Constructor,以下是如何在图像头文件中实例化向量: std::vector<Object> objects; std::向量对象; new返回一个指针,您有一个对象值的向量,而不是指向对象的指针。您不需要在堆上显式地分配对象(除非您将多态地使用对象),使用 objects.push_back(Object(rand(), rand(), rand(), rand())); 如果对象是派生实例的集合,则需要使用以下内容 std::vector<std::unique_ptr<Obje

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

std::vector<Object> objects;
std::向量对象;

new
返回一个指针,您有一个
对象
值的向量,而不是指向
对象
的指针。您不需要在堆上显式地分配
对象
(除非您将多态地使用
对象
),使用

objects.push_back(Object(rand(), rand(), rand(), rand()));
如果
对象
是派生实例的集合,则需要使用以下内容

std::vector<std::unique_ptr<Object>> objects;
std::向量对象;
并添加带有

objects.push_back(std::make_unique<Some_derived_class>(rand(), rand(), rand(), rand()));
objects.push_back(标准::使_唯一(rand(),rand(),rand(),rand());
(如果您的库支持
使_唯一
,则为)


如果您的库不支持
unique\u ptr
,则更新到支持的内容。

new
返回一个指针,表示您有一个
对象
值的向量,而不是指向
对象
的指针。您不需要在堆上显式地分配
对象
(除非您将多态地使用
对象
),使用

objects.push_back(Object(rand(), rand(), rand(), rand()));
objects.reserve(nObjects);
for(int i = 0; i < nObjects; ++i)
    objects.emplace_back(rand(), rand(), rand(), rand());
如果
对象
是派生实例的集合,则需要使用以下内容

std::vector<std::unique_ptr<Object>> objects;
std::向量对象;
并添加带有

objects.push_back(std::make_unique<Some_derived_class>(rand(), rand(), rand(), rand()));
objects.push_back(标准::使_唯一(rand(),rand(),rand(),rand());
(如果您的库支持
使_唯一
,则为)

如果您的库不支持
unique\u ptr
,则更新为支持的对象。

对象保留(noobjects);
objects.reserve(nObjects);
for(int i = 0; i < nObjects; ++i)
    objects.emplace_back(rand(), rand(), rand(), rand());
对于(int i=0;i
请注意,您不能同时调整
对象的大小和
向后推
向后放置
对象。保留(noobjects);
对于(int i=0;i


请注意,您不能同时调整
大小
和执行
向后推
向后放置

显示
对象的定义。另外,如果每次调用函数时都重新设定
rand
的种子,坐标也不会是随机的。不是
Object
objects
vector
本身。好的,我已经使用std::vector*objects=new vector()进行了编辑尝试@Wajahat-hmm,但是我的
对象
没有默认构造函数,我仅有的构造函数接受这4个参数。顺便说一句,校园里见,这里是SBU的本科生。展示
对象的定义。另外,如果每次调用函数时都重新设定
rand
的种子,坐标也不会是随机的。不是
Object
objects
vector
本身。好的,我已经使用std::vector*objects=new vector()进行了编辑尝试@Wajahat-hmm,但是我的
对象
没有默认构造函数,我仅有的构造函数接受这4个参数。顺便说一句,校园里见,这里是SBU的本科生。嗯,我正在使用最新的g++编译器,但似乎找不到它。@audiFanatic使用
-std=c++1y
-std=c++11
@audiFanatic编译,只要他们使用VS 2010或更新版本,是的
make_unique
是在2013中添加的,较旧的版本只需复制上面链接中的4行代码片段即可。@audiFanatic或可能不是,看起来只有VS 2013支持可变模板。您可以简单地使用
新建一些派生类
而不是
使(u)唯一
,但请阅读到Herb Sutters页面的链接,因为存在一些异常风险。
调整
必须删除或更改为
保留
hmm,我正在使用最新的g++编译器,但它似乎找不到。@audiFanatic使用
-std=c++1y
-std=c++11
@audiFanatic编译,只要他们使用VS 2010或更新版本,是的
make_unique
是在2013中添加的,较旧的版本只需复制上面链接中的4行代码片段即可。@audiFanatic或可能不是,看起来只有VS 2013支持可变模板。您只需使用
新的一些派生类
,而不是
使(u)唯一
,但是,请阅读Herb Sutters页面的链接,因为在例外情况下会涉及一些风险。
调整大小
必须删除或更改为
保留
回装
是一个很好的选择。
回装
是一个很好的选择。