Auf welche Auflage vom Buch beziehst du dich? Das erste Listing zu Listen (9.4) bezieht sich auf eine Liste auf den Typ CRaumschiff* und das zweite nicht. Ist in deiner Auflage vielleicht etwas anders. Aber in der die ich besitze steht dort konkret Zeiger auf CRaumschiff.
"list<T*> lSchiffe" ist etwas verwirrend.
Den Part finde ich in meiner Auflage nicht. Steht das wirklich so in deinem Buch? Ich kann mir das nicht ganz vorstellen.
lSchiffe ist also mein array. Und CRaumschiff mein Zeiger, dass ajf die verschiedenen Elemente zeigt.
Nein, eine Liste ist kein Array. Verkettete Listen können zwar intern mit einem Array umgesetzt werden, müssen sie aber nicht. Das spielt auch für dich keine Rolle. Wenn es wie ein Array wäre bräuchtest du ja keine Liste. Eine verkettete Liste ist einfach ein Container in den du etwas rein schieben kannst. Du kannst dir wie bei jedem STL Container die Iteratoren auf das erste und hinter das letzte Element besorgen. Damit kannst du deine Liste durchlaufen und auf die Elemente zugreifen. Auf Kopf und Ende der Liste kannst du direkt zugreifen. Was du aber im Vergleich zum Array nicht kannst ist direkt per Index auf ein Element zugreifen. Elemente kannst du an jeder beliebigen Stelle in der Liste einfügen. Das kannst du bei einem Array zum Beispiel nicht. Mal ein Beispiel:
Ein Array mit den Werten: [2, 3, 4, ?] wobei das Array die Größe 4 hat und der Wert nach der 4 nicht von dir selbst gesetzt wurde. Dort steht also irgendetwas was dich aber aktuell nicht interessiert (deshalb habe ich mal ein Fragezeichen hingeschrieben). Jetzt möchtest du gerne vor der 2 eine 1 einfügen. Dafür musst du jetzt selbst die restlichen Werte nach hinten kopieren um dann an die erste Position eine 1 zu schreiben. Danach hast du [1, 2, 3, 4].
Bei einer Liste geht das einfacher. Du hast zum Beispiel die Liste 2->3->4 und fügst jetzt einfach am Anfang die 1 an. Danach hast du 1->2->3->4 und gut ist. Einfach weil es ein völlig anderer Container ist.
Wahrscheinlich liegt das daran,dass es allgemein gehalten ist. Ich würde in der Klasse list bereits T* xyz deklarieren und dann eben nur list<CRaumschiff> schreiben. Waere ja dasselbe.
Ist es nicht. Wenn in der Klasse der Liste T* stehen würde könnte die Liste nur mit Zeigern umgehen. Wenn du jetzt eine Liste von einem nicht Zeiger Typ haben möchtest geht das nicht. Du könntest keine Liste von ints erstellen und auch keine Liste von CRaumschiffen. Nur eben von Zeigern darauf. Das möchte man ja nicht immer. In ein Template kannst du so erst mal alles rein stopfen. Und wie drakon schon sagte ist ein Zeiger auf etwas einfach ein weiterer Typ. Du kannst std::list<int> benutzen aber auch std::list<int*> oder std::list<int*****> wenn du denn möchtest. Das letzte mag erst mal ziemlich merkwürdig aussehen ist aber an sich möglich. Es ist eben ein Zeiger auf einen Zeiger auf einen Zeiger und so weiter. Brauchen wirst du so etwas nicht. Ich möchte damit nur zeigen dass ein Zeiger auf egal was wieder ein Typ ist.