繁体   English   中英

C ++指针向量

[英]C++ Vector of pointers

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

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

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

我只做两个向量 - 一个指针和一个电影,并对这两个向量进行一对一的映射?

它意味着这样的事情:

std::vector<Movie *> movies;

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

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

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

据我所知,你创建了一个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对象。 然后创建一个指针向量,其中每个元素(指针)指向其中一个Movie对象?

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

通过使用new Movie()动态分配Movie对象,您将获得指向新对象的指针。 电影不需要第二个矢量,只需存储指针即可访问它们。 就像Brian写的那样,矢量将被定义为

std::vector<Movie *> movies

但请注意,向量将不会删除您的对象,这将导致内存泄漏。 它可能与你的作业无关,但通常你应该删除所有指针,当你不再需要它们时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM