STL List mit Klassen

Sinac

Erfahrenes Mitglied
Hallo!
Habe mir vor kurzem mal etwas mit verketteten Listen
beschäftigt und bin da auch gut mit zurecht gekommen.
Wollte jetzt aber ganz gerne list<> aus der STL
verwenden, und zwar mit Objekten einer selbstgeschriebenen
Klasse.
Leider habe ich da so meine Probleme mit. Habe das ganze
probeweiser erstmal mit int propiert, das ist auch kein
Problem:
Code:
   list<int> kont;
   list<int>::iterator it;
   kont.push_back(1);
   kont.push_back(2);
   kont.push_back(3);
   for (it = kont.begin(); it != kont.end(); it++)
      cout << *it << ' ';
   cout << '\n';
Das ist alles soweit klar, nur wie mach ich das ganze mit
meiner Klasse? Hat da jemand ne kurze Erklärung, Einführung
etc.? Irgendwelche hilfreichen seiten?
Googlen hat mich nich wirklich weiter gebracht, da sind immer
nur Erklärungen für vector (was ja nicht so schlimm wäre) und
mit normalen Datentypen!

Greetz...
Sinac
 
Ich hab da zwar keine Ahnung von, aber ein Freund hat mal sowas gecodet. Ich häng dir die Header-datei mal ran, vielleicht kannst du damit was anfangen.

Fragen dazu werd ich aber wohl kaum beantworten können.

Gruß
Falk
 

Anhänge

Sieht so aus als hätte dein freund die liste selber geschrieben,
das hatte ich auch schonmal, wollte jetzt aber die aus der stl
nutzen.

Geht das überhaupt so wie ich mir das vorstelle?
 
Geht das überhaupt so wie ich mir das vorstelle?
Kann man so nicht sagen.

Wenn Deine Klasse kopierbar ist, sollte es eigentlich keine Probleme geben. Sicherheitshalber solltest Du sie mit Defaultkonstruktor, Kopierkonstruktor und Zuweisungsoperator versehen, eventuell noch mit einem Destruktor.

Das Deine Klasse kopierbar ist, ist wichtig, weil die STL-Container grundsätzlich *Kopien* von dem speichern, was du reinsteckst.

Beispiel:

Code:
class CMyClass
{
public:
  //- constructor
  CMyClass() : m_iWert( 4711 ) {}

  //- copy constructor (wird beim Kopieren verwendet)
  CMyClass( const CMyClass& rhs ) : m_iWert( rhs.m_iWert ) {}

  //- assignment operator (wird bei Zuweisung verwendet)
  CMyClass& operator=( const CMyClass& rhs )
  {
    if ( this == &rhs ) return *this;
    m_iWert = rhs.m_iWert;
    return *this;
  }

  //- destructor (virtual)
  virtual ~CMyClass() {} //- nix zu tun

  //- Setter für m_iWert
  void wert( const int& einwert ) { m_iWert = einwert; } 
  //- Getter für m_iWert
  int wert() const { return m_iWert; }

protected:
private:
  int m_iWert;
};

(Für einfache Datentypen und Klassen, die keinen zusätzlichen Speicher (oder andere Ressourcen) allozieren, genügen normalerweise die entsprechendem vom Compiler zur Verfügung gestellten Methoden.)
Ein sehr gutes Buch, in dem auch dieses Thema behandelt wird, ist übrigens Scott Meyers' "Effektiv C++ programmieren" (Addison-Wesley)

Googlen hat mich nich wirklich weiter gebracht, da sind immer
nur Erklärungen für vector (was ja nicht so schlimm wäre) und
mit normalen Datentypen!
Wenn es bei einer Klasse mit std::vector funktioniert, dann normalerweise auch für std::list.

HTH
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück