[c++] Problem mit STL (list, vector sort(),etc..)

radazong

Mitglied
Hello again!
Ich habe ein Problem. Undzwar arbeite ich gerade das Buch "Die C++ Programmiersprache" durch, d.h. bearbeite die Übungsaufgaben darin. Nur leider wirft der gute Bjarne mit Templates, ContainerKlassen, etc... nur so um sich, als gäbe es nichts anderes.
Und auf dem Gebiet habe ich nun überhaupt keine tiefgreifende Programmierpraxis *schäm*.
Nun wollte ich eben eine Liste erstellen, in die strings von der Eingabe gelesen werden.
das klappte auch ganz gut. Nur sollte man diese Liste dann sortieren, und alles EINMAL ausgeben lassen.

Hier also die erste Frage:
01.) --> Kann man den sort()-Algorithmus nicht auf Listen anwenden? Denn da gab mein Kompiler Fehlermeldungen aus.
Wenn ich hingegen das ganze (ohne sonstige Abänderung) als vector implementiere, funktioniert es. und...

02.) --> Wenn ich dem Algorithmus unique_copy() als Ziel "ZielVector.begin()" übergebe, lässt sich das Programm zwar kompilieren, jedoch stützt es dann an ebendieser Stelle ab.
wenn ich jedoch als Ziel "back_inserter(ZielVector)" angebe, funktioniert alles ohne Probleme.
Ich brauche doch den ZielVector nur ein einziges Mal in meinem Programm - es wird durch den ersten Aufruf doch nichts überschrieben - warum klappt es so nicht?

Wäre schön, wenn jemand einen Rat weiss.

Gruß
 
Hi.
Nun wollte ich eben eine Liste erstellen, in die strings von der Eingabe gelesen werden.
das klappte auch ganz gut. Nur sollte man diese Liste dann sortieren, und alles EINMAL ausgeben lassen.

Hier also die erste Frage:
01.) --> Kann man den sort()-Algorithmus nicht auf Listen anwenden? Denn da gab mein Kompiler Fehlermeldungen aus.
Wenn ich hingegen das ganze (ohne sonstige Abänderung) als vector implementiere, funktioniert es. und...
Nein, std::sort macht für std::list nicht viel Sinn, da dieser Container keinen wahlfreien Zugriff bietet. Deswegen hat std::list eine eigene sort() Methode.
02.) --> Wenn ich dem Algorithmus unique_copy() als Ziel "ZielVector.begin()" übergebe, lässt sich das Programm zwar kompilieren, jedoch stützt es dann an ebendieser Stelle ab.
wenn ich jedoch als Ziel "back_inserter(ZielVector)" angebe, funktioniert alles ohne Probleme.
Ich brauche doch den ZielVector nur ein einziges Mal in meinem Programm - es wird durch den ersten Aufruf doch nichts überschrieben - warum klappt es so nicht?
Wenn dein Ziel-Vektor gross genug ist - du also genügend Elemente für das Kopieren bereitgestellt hast, sollte es funktionieren. Da dein Vektor aber vermutlich leer ist, greifst du mit dem normalen Iterator auf ein Element zu welches es gar nicht gibt. Ein normaler Iterator ändert nicht die Anzahl der Elemente in einem Container, es wird nur der Zuweisungsoperator aufgerufen und danach der Iterator inkrementiert.

Gruß
 
Dankeschön!
Okay, ich hatte den Zielvektor nicht mit einer Größe initialisiert. Daran lag es dann wohl, dass mein Iterator auf nichts zeigen konnte.

Was für eine Sortierfunktion gibt es denn für eine Liste?

Und, wenn ich fragen darf,...
Wie lang programmierst du eigentlich schon? Ich glaub, bisher hattest du zu fast jedem Thread hie im Forum eine Lösung parat (zumindest für meine :) ). Wie hast du denn angefangen das zu lernen?

Gruß
 
Hi.
Dankeschön!
Okay, ich hatte den Zielvektor nicht mit einer Größe initialisiert. Daran lag es dann wohl, dass mein Iterator auf nichts zeigen konnte.

Was für eine Sortierfunktion gibt es denn für eine Liste?
Wie gesagt, die Klasse std::list besitzt eine eigene sort() Methode (da die Datenstruktur einen speziellen Algorithmus zum Sortieren erfordert): http://www.cppreference.com/cpplist/sort.html
Und, wenn ich fragen darf,...
Du darfst... :)
Wie lang programmierst du eigentlich schon? Ich glaub, bisher hattest du zu fast jedem Thread hie im Forum eine Lösung parat (zumindest für meine :) ). Wie hast du denn angefangen das zu lernen?
Also, ich programmiere schon so an die 11 Jahre. Habe damals mit Basic meine ersten Schritte gemacht. Dann habe ich in der Schule Pascal bzw. Delphi gelernt. Zu Hause habe ich dann Assembler und C++ gelernt. C++ habe ich tatsächlich mit einem Buch von einem gewissen B. Stroustrup ;) gelernt...

Aber auch mit einer Computersprache ist es wie mit natürlichen Sprachen auch: um sie wirklich flüssig verwenden zu können, hilft nur trainieren.

Gruß
 
Oha...bin jetzt grad ein gutes Jahr dabei :) . Und ich habe glaub ich noch einen ganz schönen Weg vor mir. Aber ich denke ich bin auf dem richtigen Weg, wenn ich immernoch mit der gleichen Motivation wie am Anfang dabei bin :).
Mein Problem konnte auf jeden Fall gelöst werden,
vielen Dank!

Tschö
 
Zurück