30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

16.2 Conta<strong>in</strong>er 501<br />

Element immer vor dem Element e<strong>in</strong>fügt auf das der Iterator verweist.<br />

Das Ändern der Position des Iterators um e<strong>in</strong>s <strong>in</strong> Richtung Listenanfang<br />

bewerkstelligen wir durch Aufruf des -- Operators, der für den Iterator<br />

speziell def<strong>in</strong>iert ist, wie man <strong>in</strong> Zeile 22 sieht.<br />

• Nun, da der Iterator auf das Element zeigt, vor dem wir e<strong>in</strong> Element<br />

e<strong>in</strong>fügen wollen, rufen wir <strong>in</strong>sert auf, wobei die Aufrufparameter folgendermaßen<br />

zu <strong>in</strong>terpretieren s<strong>in</strong>d: Der erste Parameter gibt an, vor welchem<br />

Element e<strong>in</strong>gefügt werden soll. Der zweite Parameter gibt an, wie viele Elemente<br />

e<strong>in</strong>gefügt werden sollen. Das bedeutet, dass man e<strong>in</strong>- und dasselbe<br />

Element auch 20 Mal e<strong>in</strong>fügen kann, wenn man hier e<strong>in</strong>fach 20 angibt. Der<br />

dritte Parameter ist das Element selbst.<br />

In den Zeilen 24–25 wiederholt sich dasselbe Spiel. Will man die Liste nun<br />

von Anfang bis Ende durchgehen, so holt man sich e<strong>in</strong>en Iterator, der auf<br />

das erste Element zeigt, wie <strong>in</strong> Zeile 29 zu sehen ist. Die Schleife <strong>in</strong> den<br />

Zeilen 30–31 zeigt, dass der Iterator erstens kompatibel zu e<strong>in</strong>em Po<strong>in</strong>ter auf<br />

e<strong>in</strong> Element ist und dass man ihn mit dem abschließenden Element der Liste<br />

vergleichen kann, um zu wissen, wann es ke<strong>in</strong> weiteres Element mehr gibt.<br />

Dass das ganze Spielchen auch so funktioniert, wie hier beschrieben, sieht<br />

man am Output, den das Programm liefert:<br />

i t e r a t i n g l i s t from the beg<strong>in</strong>n<strong>in</strong>g :<br />

1 2 3 5<br />

Die Möglichkeiten, die e<strong>in</strong>e Liste bietet, gehen weit über das E<strong>in</strong>fügen, Entfernen<br />

und Durchgehen von Elementen h<strong>in</strong>aus: Man kann Listen auch teilen,<br />

sortieren und mehrere Listen zu e<strong>in</strong>er zusammenfügen. Dies geschieht über<br />

die Methoden splice, sort und merge.<br />

16.2.3 Double-Ended Queues<br />

Bisher kennen wir e<strong>in</strong>erseits Vektoren, die effizienten <strong>in</strong>dizierten Zugriff gestatten<br />

und Listen, die effizientes E<strong>in</strong>fügen und Löschen von Elementen erlauben,<br />

jedoch ke<strong>in</strong>en <strong>in</strong>dizierten Zugriff unterstützen. Relativ oft stoßen<br />

wir <strong>in</strong> Anwendungen auf e<strong>in</strong>en recht speziellen Fall, der so häufig ist, dass<br />

ihm e<strong>in</strong>e eigene Datenstruktur gewidmet ist: Wir benötigen e<strong>in</strong>en Conta<strong>in</strong>er,<br />

der es erlaubt am Anfang und am Ende e<strong>in</strong>er Sequenz Elemente effizient e<strong>in</strong>zufügen<br />

(nicht <strong>in</strong> der Mitte), der jedoch auch den schnellen <strong>in</strong>dizierten Zugriff<br />

auf die e<strong>in</strong>zelnen Elemente gestattet. Diese Datenstruktur nennt sich Deque<br />

(ausgesprochen: dek), was für double-ended-Queue steht. Das entsprechende<br />

Template nennt sich bezeichnenderweise deque, wie wir am kurzen Beispiel<br />

sehen können (simple_deque_demo.cpp):<br />

1 // simple deque demo . cpp − j u s t a simple demo , how to<br />

2 // use the deque template<br />

3<br />

4 #<strong>in</strong>clude <br />

5 #<strong>in</strong>clude

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!