Container-Klasse zur verwaltung von Listen?
-
Moin,
ich suche nach einer Klasse die es mir ermöglicht möglichst einfach eine Liste zu verwalten. Das heißt:
> Elemente hinzufügen
> Elemente löschen
> Elemente verschieben
> Elemente ersetzten
> Elemente sortieren
> Elemente auslesen
> usw.Mir ist es wichtig das das ganze in der Standard Bibliothek oder der STL von C++ bereits vorhanden ist damit jeder es überall mit einem GCC Compiler compilieren kann. Gibt es eine solche Klasse/Template oder muss ich mir das selber schreiben? Kennt jemand einen Ort wo ich mir entsprechende Header die solch eine Klasse enthalten herunterkladen kann?
Ich habe mich bereits mit vector und list auseinander gesetzt jedoch fehlen diesen Klassen einfach dinge wie das überschreiben von Elementen. Sie sind zwar gut geeignet um Listen zu erstellen und um auf sie zuzugreifen allerdings bieten sie meinermeinugn nach nicht die einfachen fähigkeiten eine Liste möglichst leicht zu modifizieren.
Ich stelle mir eine Klasse vor die ArrayList aus der Java-Bibliothek ähnelt. Gibt es sowas?
Gruß, Prophet05
-
Prophet05 schrieb:
Ich habe mich bereits mit vector und list auseinander gesetzt jedoch fehlen diesen Klassen einfach dinge wie das überschreiben von Elementen. Sie sind zwar gut geeignet um Listen zu erstellen und um auf sie zuzugreifen allerdings bieten sie meinermeinugn nach nicht die einfachen fähigkeiten eine Liste möglichst leicht zu modifizieren.
Ich denke schon, das vector oder list einfach zu modifizieren sind. Was genau willst Du den tun?
-
meineListe.set(index, wert);Das soll nur ein Beispiel sein. Aber solch eine simple funktion gibt es meines wissens nach in diesen Klassen nicht. Ich kann zwar einen wert einfügen und einen anderen löschen aber eine einfache funktion wie einen wert zu überschreiben geht nicht.
Ich lese eine Liste von zahlen aus einer text datei ein. Diese zahlen werden nun von mir verarbeitet. Wie ist ganz egal wichtig ist das ich die von mir oben genannten grundoperationen einfach durchführen kann.
Hier nochmal etwas was meine vorstellung verdeutlicht: ArrayList (Java)
-
Hallo
Genau dafür ist eine List per Definition nämlich nicht da. Eine Liste darf keinen wahlfreien Zugriff haben, sondern die Elemente werden auschließlich über die Iteratoren angesprochen.
Das was du willst ist ein std::vector. Dort kannst du zum Beispiel so zugreifenmyvector[index] = wert;Das Wort ArrayList ist ein Widerspruch an sich.
bis bald
akari
-
Das geht? Da hätte ich auch selbst drauf kommen können. Warum steht das nirgendswo?
Wie definiert man den diese funktionalität? Weil soweit ich Operator überladung verstanden habe kann man entweder "=" oder "[]" überladen, aber beides zugleich?
Edit:
akari schrieb:
Genau dafür ist eine List per Definition nämlich nicht da. Eine Liste darf keinen wahlfreien Zugriff haben, sondern die Elemente werden auschließlich über die Iteratoren angesprochen.
Warum enthält die std::list Klasse dann mehr funktionen zur manipulation als die std::vector klasse?
-
Hallo
Das geht? Da hätte ich auch selbst drauf kommen können. Warum steht das nirgendswo?
Ich weiß ja nicht wo du gesucht hast, aber das steht in jedem guten C++ Buch, gutem C++ Tutorial, in den öffentlichen Referenzen, in unserem Forum und in unserem Magazin.
Wie definiert man den diese funktionalität? Weil soweit ich Operator überladung verstanden habe kann man entweder "=" oder "[]" überladen, aber beides zugleich?
Grundsätzlich benutzt vector in diesem Fall seinen []-Op. Der = -OP ist dann von der Element-Klasse abhängig. Und auch Operatoren können verkettet werden.
Warum enthält die std::list Klasse dann mehr funktionen zur manipulation als die std::vector klasse?
Keine Ahnung, wer behauptet denn das? bzw. seit wann wird eine Klasse nach der Anzahl der Methoden bewertet? vector und list sind nunmal zwei verschiedene Konzepte. Schau die in unserem Magazin die Thread-Serie über die STL an, dort werden die Vor- und Nachteile der einzelnen Container erklärt.
bis bald
akari
-
akari schrieb:
Keine Ahnung, wer behauptet denn das?
Also wenn ich www.cppreference.com richtig interpretiere ist das so.
Danke für deine Hilfe!
-
Hallo
Also wenn ich www.cppreference.com richtig interpretiere ist das so.
Ja ich habe mich in diesem Punkt nicht gut ausgedrückt. Ich meinte das weil std::vector weniger Member-Funktionen hat, es gegenüber std::list nicht eingeschränkt ist. Sondern im Gegenteil wahlfreien Zugriff auf seine Elemente bietet, was List nicht kann.
Und außerdem gibts ja noch die Containerfreien Funktionen in algorithm, die für vector eingesetzt werden können.bis bald
akari
-
Hat man ein Gutes C++ Buch, braucht man solche fragen garnicht erst stellen, da steht alles nämlich erklärt drin, hab ich mir diese Woche noch alles reingezogen, und wenns trotzdem nicht Passt kann man sich ja immernoch seine eigene Klasse zur Verwaltung von Daten basteln.
-
Krux schrieb:
Hat man ein Gutes C++ Buch, braucht man solche fragen garnicht erst stellen.....
The C++ Standard Library | ISBN: 0201379260
Und für die Geizigen:
http://www.informatik.hs-bremen.de/~brey/stlb.htmlGruß Spacelord
-
Ich habe mir jetzt zu diesem Zweck dieses Werk bestellt:
http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1278Das sollte meine Probleme in dieser Hinsicht lösen. Mal sehen was ich jetzt mache. Auf jeden fall vielen dank für eure hilfe.
Edit: Entschuldigt den Doppelpost war ungewollt.
-
Ich habe mir jetzt zu diesem Zweck dieses Werk bestellen:
http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-1278Das sollte meine Probleme in dieser Hinsicht lösen. Mal sehen was ich jetzt mache. Auf jeden fall vielen dank für eure hilfe.