2010-05-17 13 views
12

Per il mio ultimo lavoro CS, sono tenuto a creare una chiamata video di classe che detiene il titolo, regista, anno, voto, attori eccC++ vettore di puntatori

Poi, sono tenuto a leggere un file che contiene un elenco di queste informazioni e memorizzarle in un vettore di puntatori su Film.

Non sono sicuro di cosa significhi l'ultima riga. Significa, leggo il file, creo più oggetti Movie. Quindi creare un vettore di puntatori in cui ogni elemento (puntatore) punta a uno di quegli oggetti Movie?

Realizzo solo due vettori: uno dei puntatori e uno dei filmati e creiamo una mappatura uno a uno dei due vettori?

risposta

29

significa qualcosa di simile:

std::vector<Movie *> movies; 

quindi si aggiunge al vettore mentre leggete le linee:

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

Ricordatevi prima di eliminare tutti i Movie* oggetti una volta che si è fatto con il vettore .

+0

+! Sì, è quello che ho preso dalla domanda anche –

+0

Se creo un vettore di interi, devo respingere un int. Se è un vettore di bool, respingo un bool. Nella propria istruzione, si richiama un oggetto Film o un puntatore del film? – xbonez

+0

Si sta spostando indietro un puntatore a un oggetto filmato (appena creato). – schnaader

1

Non sono sicuro di cosa significhi l'ultima riga. Significa, leggo il file, creo più oggetti filmato . Quindi creare un vettore di puntatori in cui ogni elemento (puntatore) punta a uno di quegli oggetti Movie?

Direi che questo è ciò che è previsto. L'intento è probabilmente quello di leggere i dati di un film, allocare un oggetto con new, inserire l'oggetto con i dati e quindi inserire l'indirizzo dei dati su vector (probabilmente non il miglior design, ma molto probabilmente a cosa è destinato Comunque).

+0

No, penso che quello che viene spinto sul vettore sia in realtà il puntatore. cioè 'movies.push (new Movie()); movies.back() -> getData(); 'o qualcosa del genere. – Cam

+0

@incrediman: Oops, giusto. Le mie dita hanno saltato un paio di parole mentre stavo scrivendo ... –

9

Per quanto ho capito, si crea una classe di film:

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

e avendo tale classe, si crea un'istanza di vettore:

std::vector<Movie*> movies; 

modo, è possibile aggiungere qualsiasi filmato sul collezione di film. Dal momento che si sta creando un vettore di puntatori al cinema, non dimenticate di liberare le risorse stanziate da parte delle istanze film o si potrebbe usare un po 'di puntatore intelligente deallocare cinema automaticamente:

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

O meglio ancora usare 'std :: vector >' se il vettore è l'unico oggetto che mantiene la durata degli oggetti 'Film' –

+1

Questo dovrebbe essere la risposta accettata – pistacchio

1

Assegnando dinamicamente un oggetto filmato con new Movie(), si ottiene un puntatore al nuovo oggetto. Non hai bisogno di un secondo vettore per i film, basta memorizzare i puntatori e puoi accedervi. Come ha scritto Brian, il vettore sarebbe definito come

std::vector<Movie *> movies

ma essere consapevoli che il vettore non cancellare i tuoi oggetti in seguito, che si tradurrà in una perdita di memoria. Probabilmente non ha importanza per i tuoi compiti, ma normalmente dovresti eliminare tutti i puntatori quando non ne hai più bisogno.

+7

"Probabilmente non ha importanza per i tuoi compiti" - Non ne sono così sicuro - sembra che il prof lo stia preparando per questo !!! –