【问题标题】:C++ Vector of pointersC++ 指针向量
【发布时间】:2010-05-17 22:48:43
【问题描述】:

对于我最新的 CS 作业,我需要创建一个名为 Movie 的类,其中包含标题、导演、年份、评级、演员等。

然后,我需要读取一个包含此信息列表的文件,并将其存储在指向电影的指针向量中。

我不确定最后一行是什么意思。这是否意味着,我读取了文件,创建了多个 Movie 对象。然后制作一个指针向量,其中每个元素(指针)指向其中一个 Movie 对象?

我是否只制作两个向量 - 一个指针和一个 Movies 并制作这两个向量的一对一映射?

【问题讨论】:

    标签: c++


    【解决方案1】:

    意思是这样的:

    std::vector<Movie *> movies;
    

    然后在阅读行时添加到向量中:

    movies.push_back(new Movie(...));
    

    请记住在完成矢量后删除所有 Movie* 对象。

    【讨论】:

    • +!是的 - 这也是我从问题中得到的结果
    • 如果我创建一个整数向量,我必须推回一个整数。如果它是一个布尔向量,我推回一个布尔值。在你的陈述中,我是推回一个 Movie 对象还是一个 Movie 指针?
    • 您将一个指向(新创建的)电影对象的指针推回。
    • 明白了。现在,我添加到创建的向量中的对象: std::vector movies;我可以正常访问它们作为电影[0]、电影[1] 等吗?
    • @xbonez: movies[0] 会给你向量中的第一个指向电影的指针。这可能看起来令人困惑,因为如果您要动态分配 Movie 对象(没有向量,即作为数组),您仍然会使用指针,但 movies[0] 会直接为您提供对象。在任何情况下,它们与向量的规则是,当您声明一个向量(如std::vector&lt;Movie *&gt; movies)时, 之间的任何内容都是您访问元素时得到的内容。所以在这里,你会得到一个 Movie * ——它是一个指向电影的指针。
    【解决方案2】:

    据我了解,您创建了一个 Movie 类:

    class Movie
    {
    private:
      std::string _title;
      std::string _director;
      int         _year;
      int         _rating;
      std::vector<std::string> actors;
    };
    

    有了这样的类,你就创建了一个向量实例:

    std::vector<Movie*> movies;
    

    因此,您可以将任何电影添加到您的电影收藏中。由于您正在创建一个指向电影的指针向量,因此不要忘记释放电影实例分配的资源,或者您可以使用一些智能指针自动释放电影:

    std::vector<shared_ptr<Movie>> movies;
    

    【讨论】:

    • 如果向量是唯一保持Movie对象生命周期的对象,则更好地使用std::vector&lt;std::unique_ptr&lt;Movie&gt;&gt;
    【解决方案3】:

    通过使用new Movie() 动态分配Movie 对象,您可以获得指向新对象的指针。电影不需要第二个向量,只需存储指针即可访问它们。正如布赖恩所写,向量将被定义为

    std::vector&lt;Movie *&gt; movies

    但请注意,vector 之后不会删除您的对象,这将导致内存泄漏。这对你的家庭作业可能无关紧要,但通常你应该在不再需要它们时删除所有指针。

    【讨论】:

    • “你的家庭作业可能没关系” - 我不太确定 - 听起来教授正在为此设置他!!!
    【解决方案4】:

    我不确定最后一行是什么意思。这是否意味着,我阅读了文件,创建了多个 电影对象。然后制作一个指针向量,其中每个元素(指针)指向其中一个 Movie 对象?

    我猜这就是我们的意图。意图可能是你读取一部电影的数据,用new分配一个对象,用数据填充对象,然后将数据的地址推到vector上(可能不是最好的设计,但无论如何,很可能是预期的结果)。

    【讨论】:

    • 不,我认为被推到向量上的实际上是指针。即movies.push(new Movie()); movies.back()-&gt;getData(); 什么的。
    • @incrediman:糟糕,完全正确。我打字的时候手指跳过了几个字……
    猜你喜欢
    • 2020-04-13
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2011-07-06
    • 1970-01-01
    • 2017-04-27
    • 2012-06-07
    相关资源
    最近更新 更多