Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

std::vector<Movie *> movies;

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

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

Не забудьте удалить все объекты 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;

Ответ 3

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

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

Ответ 4

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

std::vector<Movie *> movies

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