Вектор C++ указателей

Для моей последней домашней работы CS я обязан создавать класс под названием Фильм, который исполняет обязанности, директора, год, оценка, агенты и т.д.

Затем я требуюсь считать файл, который содержит список этой информации, и сохраните ее в векторе указателей на Фильмы.

Я не уверен, что означает последняя строка. Это означает, я считал файл, создаю несколько Объектов видеоклипа. Затем сделайте вектор указателей, где каждый элемент (указатель) указывает на один из тех Объектов видеоклипа?

Я просто делаю два вектора - один из указателей и один из Фильмов и делаю непосредственное отображение этих двух векторов?

23
задан casperOne 2 October 2012 в 19:23
поделиться

4 ответа

Это означает что-то вроде этого:

std::vector<Movie *> movies;

Затем вы добавляете в вектор при чтении строк:

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

Не забудьте удалить все объекты Movie*, как только вы закончите с вектором.

43
ответ дан 29 November 2019 в 01:20
поделиться

Насколько я понимаю, вы создаете класс 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;
11
ответ дан 29 November 2019 в 01:20
поделиться

Динамически выделяя объект Movie с помощью new Movie(), вы получаете указатель на новый объект. Вам не нужен второй вектор для фильмов, просто храните указатели, и вы сможете получить к ним доступ. Как написал Брайан, вектор будет определен как

std::vector movies

Но имейте в виду, что вектор не удалит ваши объекты после этого, что приведет к утечке памяти. Возможно, это не имеет значения для вашего домашнего задания, но обычно вы должны удалять все указатели, когда они вам больше не нужны.

1
ответ дан 29 November 2019 в 01:20
поделиться

Я не знаю, что означает последняя строка. Означает ли это, что я прочитал файл, создал несколько Объекты кино. Затем создайте вектор указателей, где каждый элемент (указатель) указывает на один из этих объектов Movie?

Я предполагаю, что это то, что задумано. Предполагается, что вы, вероятно, прочитаете данные для одного фильма, назначите объекту new , заполните объект данными, а затем поместите адрес данных в вектор (видимо, не лучший дизайн, но, скорее всего, все равно то, что задумано).

1
ответ дан 29 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: