Wozu iteratoren hernehmen, wenn es andere alternativen gibt ?
-
Xthomas schrieb:
oh okay ... kommt mir zwar für den anfang total durcheinander vor (wie bei allen STL zeugs), aber was solls. Da braucht man schon eine besondere denkweise, überhaupt das 'konzept' der STL zu verstehen
Ja, das ist so. Die ganze Herangehensweise erfordert eine ganz besondere Denkweise, die man sich erst aneignen muss. Allerdings bin ich leider davon überfordert, das in einem Forum zu erklären. Letzte Woche habe ich an der Uni ein Seminar gegeben, um genau das zu vermitteln -- und ich denke, mit einigem Erfolg. Aber es war eben ein Vortrag mit einer Tafel vonnöten, ohne das hätte ich's nicht geschafft. Und selbst so habe ich mir den Mund fusselig geredet.
Vielleicht kommt ja irgendwann der knackpunkt, bei dem ich sage: "aaaah, deswegen ist das also sinnvoll !"
Ja, der wird definitiv kommen.

-
Für die C++ Standardlibrary ist immer eine Investition in ein gutes Buch nötig. Man kommt mit kurzen Tutorials und Forenantworten nicht sehr weit. Denn immerhin füllen manche Buchautoren ganze Bücher zum Thema Container, Algorithmen und Iteratoren. Das geht dann halt nur mit vielen Beispielen und genaueren Erklärungen.
-
Ja, das ist so. Die ganze Herangehensweise erfordert eine ganz besondere Denkweise, die man sich erst aneignen muss.
Gut, und ich dachte schon, ich währe zu dumm es zu verstehen
Ne, du hast schon recht, die STL erfordert wirklich ein tiefgründiges verständnis der programmiersprache. Da ja 2009 der neue C++ standard rauskommt, möchte ich bis dahin wenigstens die wichtigsten algorithmen und container der STL kennen, sonst blicke ich ja irgendwann garnicht mehr durch ...Ja, der wird definitiv kommen.

...Ich bin beruhigt

Xthomas
-
Für die C++ Standardlibrary ist immer eine Investition in ein gutes Buch nötig. Man kommt mit kurzen Tutorials und Forenantworten nicht sehr weit. Denn immerhin füllen manche Buchautoren ganze Bücher zum Thema Container, Algorithmen und Iteratoren. Das geht dann halt nur mit vielen Beispielen und genaueren Erklärungen.
Danke artchi für den hinweis ... Das tutorial zu den iteratoren ist übrigens von dir !

-
Ich hab mit diesem eBook von Breymann den Knackpunkt erreicht. Find ich wirklich verständlich aufgebaut.
Frage mich wieso das nicht in der Tutorial Liste im Forum ist --> Tutorials und eBooks - Deutsch - STL (0)
-
HumeSikkins schrieb:
(wobei ich dann nicht at() sondern den operator[] verwenden würde).
Ehrlich jetzt ? Ich hatte früher immer mit [] als Zugriff gearbeitet, bis ich mal gelesen habe, dass .at() eine execption wirft, wenn man ausserhalb des Bereiches ist und [] nicht. Deswegen bin ich davon ausgegangen, dass die.at Methode den Zugriffsoperatoren [] vorzuziehen ist

-
Solange du weißt, was du da machst, ist op[] schneller. Und at() benötigst du eigentlich nur, wenn die Gefahr eines Index-Überlaufs besteht (bei einer korrekt formulierten Iterationsschleife also eher nicht).
-
Ja, aber in der for-Schleife muß auch eine Indexprüfung rein. :p Wenn man at() benutzt, kann man sich aber die Prüfung sparen und ein while(true) bauen und um die Schleife ein try-catch.

Am besten man benutzt Iteratoren, dann braucht man kein [] und kein at() benutzen.
Am aller aller besten ist aber noch for_each, weil dann sind alle möglichen Fehlerquellen auf ein Minimum reduziert. 
-
Achja, ich weiß nicht wie weit Bjarne Stroustrup mit seinem Vorschlag gekommen ist: aber er hatte dem Komitee vorgeschlagen, auch in den []-Operator eine Indexprüfung vorzuschreiben. Weil damit endlich C++ von den bösen Bufferoverruns wegkommen würde. (wer nicht hört muß halt fühlen!) Es benutzen halt immer noch zu viele Leute den []-Operator unbedacht.
-
Bei manchen STL-libs gibt es ja defines, mit dem man die Bereichsprüfung auch bei opertor[] einschalten kann.
beim BCB5 (Rouge Wave) heißt das _RWSTD_BOUNDS_CHECKING