C++ 如何动态存储对象(c+;+;)
我是一名编程初学者,我正试图找到一种方法来创建鸽子类对象的动态存储。这是我的密码:C++ 如何动态存储对象(c+;+;),c++,data-structures,C++,Data Structures,我是一名编程初学者,我正试图找到一种方法来创建鸽子类对象的动态存储。这是我的密码: class pigeon { public: pigeon(std::string nameI); void outputInfo(); private: std::string name; }; 我的想法是,我希望能够添加一个新对象,有一个存储其信息的地方,然后能够添加另一个对象,等等。我不知道从哪里开始,甚至不知道使用什么数据结构,我没有存储对象的经验。使用类的指针生成向量: std
class pigeon {
public:
pigeon(std::string nameI);
void outputInfo();
private:
std::string name;
};
我的想法是,我希望能够添加一个新对象,有一个存储其信息的地方,然后能够添加另一个对象,等等。我不知道从哪里开始,甚至不知道使用什么数据结构,我没有存储对象的经验。使用类的指针生成向量:
std::vector<pigeon*> pigeons;
正如评论中已经指出的那样,您最好使用一个容器来处理其资源(“资源获取是初始化”/“资源销毁是删除”),这样您自己就不必担心了。这也是在引发异常时防止资源泄漏的一种简单方法 < > C++标准库常用的容器之一是 您可以这样使用它(只是为了给您一个初步的想法,请参阅文档以获得进一步的解释和示例):
#包括
// ...
{
性病:病鸽;
鸽子。向后推(“卡尔”);//加三只鸽子
鸽子。推回(“弗兰兹”)//在比赛结束时
鸽子。推回(“Xaver”);//向量
鸽子[1];//访问“弗兰兹”
对于(auto/*maybe const*/&p:bikes){//在向量上迭代
//用鸽子p做点什么
}
}//鸽子超出范围,其析构函数称为which
//负责释放向量使用的内存。
要存储的对象是否为同一类型?如果是这样,您可以简单地使用std::vector
,您需要在问题中指出存储的含义。你的意思是记忆中的还是更持久的东西?正如@FrançoisAndrieux已经说过的。使用std::vector
。您是否有理由建议使用原始指针,并在std::vector
已经执行OP所需操作的情况下添加另一级别的间接寻址?OP希望存储动态对象。使用vector时,它首先复制并存储对象。这不是动态存储。从某些角度来看,它是没有效率的。总是有和智能指针。你能举一个使用这些指针的例子吗?如果复制对象非常昂贵,不要复制。还有更好的方法,比如在索引集合周围重新排序,而不是向量中的对象。可能使用std::list
。
pigeon * pig = new pigeon("pigeon");
pigeons.push_back(pig);
#include <vector>
// ...
{
std::vector<pigeon> pigeons;
pigeons.push_back("Karl"); // add three pigeons
pigeons.push_back("Franz"); // at the end of the
pigeons.push_back("Xaver"); // vector
pigeons[1]; // access "Franz"
for(auto /* maybe const */ &p : pigeons) { // iterate over the vector
// do something with pigeon p
}
} // pigeons goes out of scope, its destructor is called which
// takes care of deallocating the memory used by the vector.