实例化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页面的链接,因为在例外情况下会涉及一些风险。调整大小
必须删除或更改为保留
回装
是一个很好的选择。回装
是一个很好的选择。