Wenn du für alle Einheiten in der Liste eine Aktion durchführen willst geht das wie beim Freigeben des Speichers:
|
C-/C++-Quelltext
|
1
2
3
|
for (std::list<Einheit*>::iterator i = einheiten.begin(); i != einheiten.end(); ++i)
(*i) // "dereferenzieren" des Iterators => der gespeicherte Wert (in diesem Fall ein Zeiger auf "Einheit"
->Funktion(); // Aufrufen von Funktion() von dem Objekt auf das der Zeiger an dieser Position der Liste verweist
|
Wenn du eine bestimmte Einheit in der Liste identifizieren willst musst du einen Namen, eine ID oder sonst irgendwas speichern (als Element der Basisklasse "Einheit") und die Liste durchlaufen bis du beim gewünschten Element bist.
Wenn es sehr oft vorkommt, dass du eine bestimmte Einheit finden musst (d.h. mehrmals pro Frame) solltest du statt der std::list eine std::map<IDType, Einheit*> verwenden (IDType ist der Typ den du zum Speichern der ID, des Namens, oder was auch immer du zu Identifikation benutzt, verwendest; also z.B. int)
Dann kannst du auf ein bestimmtes Element so zugreifen: einheiten[id]->Funktion();
Du könnstest auch einen std::vector verwenden. Der Verhält sich vom Prinzip her wie ein Array, das Einfügen neuer Elemente ist allerdings langsam und um eine bestimmte Einheit zu finden müsstest du vmtl. trotzdem den ganzen std::vector durchlaufen.
Das ist also eig. nur sinnvoll wenn so gut wie nie Einheiten hinzukommen / entfernt werden...
Ich empfehle dir mal dieses Buch (oder die deutsche Übersetzung falls Englisch ein großes Problem darstellt): [amazon]0201700735[/amazon]