简单动态添加和使用对象

时间:2013-11-20 23:30:25

标签: c++ vector

我不确定如何正确地执行此操作,首先我创建了一个用于存储对象的向量,例如

vector<dog> mydogs;

之后我有一个功能,每次按空格键都会将狗添加到我的矢量中,所以现在我尝试这样做了,

mydogs.pushback(new dog());

抱怨参数类型不匹配,所以我将向量更改为下面的代码,因为我想在我的向量上存储指针。

vector<&dog> mydogs;

我有这个简单的迭代器,我想检查狗的状态并用它们做点什么。

for(auto x = mydogs.begin(); x != mydogs.end();x++){...}

但我现在无法访问迭代器,即使想到这一点,我也有点迷失。

3 个答案:

答案 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 dogdog*)则不能。

答案 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占用的内存;它只会摧毁皮带。