Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何动态存储对象(c+;+;)_C++_Data Structures - Fatal编程技术网

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.