我不确定如何正确地执行此操作,首先我创建了一个用于存储对象的向量,例如
vector<dog> mydogs;
之后我有一个功能,每次按空格键都会将狗添加到我的矢量中,所以现在我尝试这样做了,
mydogs.pushback(new dog());
抱怨参数类型不匹配,所以我将向量更改为下面的代码,因为我想在我的向量上存储指针。
vector<&dog> mydogs;
我有这个简单的迭代器,我想检查狗的状态并用它们做点什么。
for(auto x = mydogs.begin(); x != mydogs.end();x++){...}
但我现在无法访问迭代器,即使想到这一点,我也有点迷失。
答案 0 :(得分:2)
Whelp。你的第一次尝试非常好。你想存储一组狗,既不是参考也不是指针。
vector<dog> mydogs;
如果您想添加小狗,只需调整容器大小:
mydogs.resize(mydogs.size() + 1);
或者,如果您有特定的狗,您也可以添加它:
dog LordFleuroVanHautendeck;
mydogs.push_back(LordFleuroVanHautendeck);
甚至在一行中:
mydogs.push_back(dog()); // poor dog has no name
最后一行可能看起来与原始行类似,但缺少的new
非常重要。 dog()
将是dog
,可以在vector<dog>::push_back()
上使用,而new dog
(dog*
)则不能。
答案 1 :(得分:1)
声明
new dog()
将指针(dog*
)返回给新分配的对象。只需使用
vector<dog> mydogs;
并使用
创建新元素mydogs.push_back(dog());
如果您真的想通过new
关键字动态创建狗的实例,则可能需要使用
vector<dog*> mydogs;
mydogs.push_back(new dog());
但请记住,您已动态创建了一个对象,因此最终必须使用delete
关键字来避免内存泄漏:
while(mydogs.size() > 0){
delete mydogs.back(); // delete the dog
mydogs.pop_back(); // get rid of the pointer
}
答案 2 :(得分:1)
指向狗的指针:
std::vector<dog *>
当您使用new
运算符时,它会返回一个指针。所以如果你想要动态分配的小狗试试这个:
std::vector<dog *> animals;
//...
animals.push_back(new dog);
我建议您查看智能指针,因为vector
不会释放dog
占用的内存;它只会摧毁皮带。