30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

e v e r s e−i t e r a t i n g vector :<br />

9 8 7 6 5 4 3 2 1 0<br />

. . . and back to the s t a r t :<br />

0 1 2 3 4 5 6 7 8 9<br />

16.4 Allocators 517<br />

In Abbildung 16.1 f<strong>in</strong>det sich e<strong>in</strong>e schematische Darstellung des soeben Beschriebenen.<br />

Die Kästchen stellen die e<strong>in</strong>zelnen Elemente dar, die Pfeile<br />

zwischen den Kästchen stehen für e<strong>in</strong>e Navigationsrichtung und s<strong>in</strong>d jeweils<br />

mit ++ bzw. -- gekennzeichnet, um zu zeigen, welcher Operator für e<strong>in</strong>en Iterator<br />

nun <strong>in</strong> welche Richtung navigiert. Zusätzlich ist noch zu sehen, worauf<br />

die Iteratoren zeigen, die man mittels beg<strong>in</strong>, end, rbeg<strong>in</strong> und rend anfordert.<br />

In der Graphik ist auch zu erkennen, warum e<strong>in</strong> Iterator und e<strong>in</strong> reverse<br />

Iterator verschiedene Datentypen se<strong>in</strong> müssen, denn sie zeigen <strong>in</strong> Bezug auf<br />

die Navigation ja völlig unterschiedliches Verhalten.<br />

Iterator:<br />

beg<strong>in</strong>() end()<br />

reverse Iterator:<br />

rbeg<strong>in</strong>()<br />

++ ++<br />

++ ++<br />

0 1<br />

...<br />

8 9<br />

−− −−<br />

−− −−<br />

++ ++<br />

++ ++<br />

9 8<br />

...<br />

1 0<br />

−− −−<br />

−− −−<br />

++<br />

−−<br />

++<br />

−−<br />

rend()<br />

Abbildung 16.1: Iterator und reverse Iterator schematisch dargestellt<br />

16.4 Allocators<br />

Allocators werden an dieser Stelle nur der Vollständigkeit halber erwähnt,<br />

um allen Lesern bewusst zu machen, wie die STL beim Anfordern von Memory<br />

vorgeht. Die STL geht davon aus, dass <strong>in</strong>tern ke<strong>in</strong>e fixen Annahmen<br />

getroffen werden dürfen, auf welche Art für welche Objekte Memory angefordert<br />

werden soll (wie schon erwähnt, die STL ist Policy-frei!). Würden die<br />

<strong>in</strong> der STL implementierten Datenstrukturen grundsätzlich Objekte hardcodiert<br />

mittels new und delete anfordern, so könnte es se<strong>in</strong>, dass sie damit <strong>in</strong><br />

speziellen Fällen gegen die Intention der Applikation verstoßen, denn sowohl<br />

für Elemente <strong>in</strong> Conta<strong>in</strong>ern als auch für <strong>in</strong>terne Objekte der Datenstrukturen<br />

könnte e<strong>in</strong> spezielles Memory Management erwünscht se<strong>in</strong>.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!