STL-Algorithmen



  • schau in den quelltextdateien deines eigenen compilers nach. da die meisten algorithmen templates sind, solltest du kein problem haben, die implementation zu bekommen.

    eine STL implementation zum durchlesen findest du z.b. auch hier: http://sourceforge.net/project/showfiles.php?group_id=146814



  • Ich schaue gerne bei sowas immer schnell hier rein: http://www.sgi.com/tech/stl/download.html



  • Hey,
    die Doku unter http://www.sgi.com/tech/stl/download.html
    ist schonmal ein Anfang. Aber viel zu den eigentlichen Methoden konnte ich da auch nicht finden.
    Gibts sowas echt nicht? Sind doch grad mal 40-60 🙂



  • Also wenn ich mir den Quelltext der STL mal so durchgucke, macht der einen unglaublich schlechtformatierten und unlesbaren Eindruck. Grausam. 👎



  • Die STL-Algorithmen sind durchweg als Templates definiert (was meinst du, wofür das T in STL steht ;)), also kannst du dir einfach mal die Header <algorithm> und <numeric> schnappen und dir dort hautnah ansehen, wie die Algorithmen funktionieren.

    edit @mikey: Das ist natürlich Absicht, um Leser zu verwirren 😃



  • CStoll schrieb:

    und dir dort hautnah ansehen, wie die Algorithmen funktionieren.

    Wie denn, bei diesem Unterstrich-Frickelcode? Unlesbar! Wieso machen die sowas?
    Edit: Wie jetzt? 😕



  • mikey schrieb:

    CStoll schrieb:

    und dir dort hautnah ansehen, wie die Algorithmen funktionieren.

    Wie denn, bei diesem Unterstrich-Frickelcode? Unlesbar! Wieso machen die sowas?

    Ach, mit etwas Übung ist das kein Problem - und zur Not mußt du mal durchgehen und die verwendeten Variablen umtaufen.

    Edit: Wie jetzt? 😕

    Der Code ist nicht wirklich dafür vorgesehen, von Menschen verstanden zu werden - wichtig ist, daß der Compiler das lesen kann (und dem ist es egal, ob eine Variable "anfang" oder "_F" genannt wird).



  • CStoll schrieb:

    Ach, mit etwas Übung ist das kein Problem - und zur Not mußt du mal durchgehen und die verwendeten Variablen umtaufen.

    Das habe ich schon vermutet, dass du einer von der ganz harten Sorte bist. 😃 Ich habe mir mal den Code der std::fstream Klasse etwas genauer angeguckt. Dabei habe ich aber nur einen Bruchteil verstanden, da der Code wirklich total unlesbar und verstrikt ist.

    CStoll schrieb:

    Der Code ist nicht wirklich dafür vorgesehen, von Menschen verstanden zu werden

    Ja aber der Code wurde doch von Menschen entworfen, folgedessen ist es doch auch sinnvoll, ihn dementsprechend lesbar zu schreiben, oder nicht?



  • Du glaubst doch nicht, das die das so programmiert haben? Das haben die nachträglich für den Vertrieb mit einem Deflater oder sowas unkenntlich gemacht.



  • mikey schrieb:

    CStoll schrieb:

    Ach, mit etwas Übung ist das kein Problem - und zur Not mußt du mal durchgehen und die verwendeten Variablen umtaufen.

    Das habe ich schon vermutet, dass du einer von der ganz harten Sorte bist. 😃 Ich habe mir mal den Code der std::fstream Klasse etwas genauer angeguckt. Dabei habe ich aber nur einen Bruchteil verstanden, da der Code wirklich total unlesbar und verstrikt ist.

    Im Normalfall reicht es mir aus zu wissen, wie man einen Algorithmus verwenden kann 😉 Aber ansonsten hilft es vermutlich zum Verständnis, wenn man die grundlegenden Konzepte verstanden hat (z.B. bei den IOStreams die Arbeitsteilung zwischen Stream (Steuerung), Stream-Buffer (Datenbeschaffung) und Locale (Formatierung)).



  • mikey schrieb:

    Ich habe mir mal den Code der std::fstream Klasse etwas genauer angeguckt.

    Wo des sein ??? 🙂 Die Streams sind nicht Bestandteil der STL, also sollten sie doch auch nicht als offener Code irgendwo rumstehen ?



  • KasF! Die Leute sagen immer zur Standardlib STL, ich habs fast aufgegeben immer wieder anzumerken. Aber ein guter Einwand von dir! Die STL kennt keine Strings und auch kein I/O-Streams. Aber das werden wir wohl nie in deren Köpfe ändern. Man steckt halt nicht drin. 😉



  • unter http://www.cplusplus.com/reference/algorithm/ steht bei den algorithmen immer ein Codeschnipsel mit der Anmerkung "the behaviour is equivalent to..."
    Da kann man recht gut sehn wie die Algorithmen funktionieren - und zwar mit lesbarem Code 😉



  • Artchi schrieb:

    Du glaubst doch nicht, das die das so programmiert haben? Das haben die nachträglich für den Vertrieb mit einem Deflater oder sowas unkenntlich gemacht.

    Natürlich glaube ich es nicht, deswegen war ich auch so skeptisch. Den Begriff 'Deflater' lese ich zum ersten mal; wusste nichtmal, dass es sowas gibt.

    KasF schrieb:

    Die Streams sind nicht Bestandteil der STL

    Hab ich auch garnicht gesagt, mich aber vielleicht falsch ausgedrückt. Ich habe mir die istream-Header angeguckt, dort sind auch einige Templateimplementierungen vorhanden, die implizit was mit IO-Streams zu tun haben. (setstate(), tellg()...)

    Artchi schrieb:

    ich habs fast aufgegeben immer wieder anzumerken

    Dann darf ich dich an dieser Stelle beruhigen. Du musst es nicht anmerken. 🙂



  • Danke an alle, besonders an dich pumuckl. Genau sowas habe ich gesucht.



  • pumuckl schrieb:

    unter http://www.cplusplus.com/reference/algorithm/ steht bei den algorithmen immer ein Codeschnipsel mit der Anmerkung "the behaviour is equivalent to..."
    Da kann man recht gut sehn wie die Algorithmen funktionieren - und zwar mit lesbarem Code 😉

    Nein, kann man nicht. Da steht nicht "the code is equivalent to", sondern "the behaviour".



  • @finix
    also mir taugts was. und darum gings in dem thread ja.



  • mikey schrieb:

    Hab ich auch garnicht gesagt, mich aber vielleicht falsch ausgedrückt. Ich habe mir die istream-Header angeguckt, dort sind auch einige Templateimplementierungen vorhanden, die implizit was mit IO-Streams zu tun haben. (setstate(), tellg()...)

    Habe ja auch gar nicht explzit erwähnt, dass du das gesagt hast 😉
    Aber dann ist ja alles gut 🙂



  • finix schrieb:

    pumuckl schrieb:

    unter http://www.cplusplus.com/reference/algorithm/ steht bei den algorithmen immer ein Codeschnipsel mit der Anmerkung "the behaviour is equivalent to..."
    Da kann man recht gut sehn wie die Algorithmen funktionieren - und zwar mit lesbarem Code 😉

    Nein, kann man nicht. Da steht nicht "the code is equivalent to", sondern "the behaviour".

    Gut, ich korrigiere mich: man kann zwar nicht unbedingt sehn wie sie intern wirklich funktionieren, aber man sieht wie sie sich verhalten. Was ja das eigentlich wichtige ist. Wie die implementer der STL meines Compilers die Probleme nu genau gelöst haben, kann mir erstmal egal sein wenn ich nicht eigene Algorithmen bauen muss 😉


Anmelden zum Antworten