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.

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

Zum Index-Operator möchte ich noch e<strong>in</strong> Wort verlieren: Dieser nimmt aus<br />

Gründen der Performance ke<strong>in</strong>e Überprüfung vor, ob der Index im erlaubten<br />

Bereich liegt. Sollte e<strong>in</strong>e solche Überprüfung beim Zugriff aus Sicherheitsgründen<br />

gewünscht se<strong>in</strong>, so steht auch die Methode at(...) zur Verfügung,<br />

die als Parameter erwartungsgemäß e<strong>in</strong>e Ganzzahl entgegennimmt.<br />

Die Elemente e<strong>in</strong>es Vektors s<strong>in</strong>d nicht nur direkt <strong>in</strong>diziert ansprechbar,<br />

sondern man kann auch entsprechende Iterators anfordern um die Elemente<br />

der Reihe nach durchzugehen (siehe auch Abschnitt 16.3).<br />

16.2.2 Listen<br />

Oft brauchen wir <strong>in</strong> unseren Programmen aber nicht e<strong>in</strong>fach nur e<strong>in</strong>en sauber<br />

gekapselten Ersatz für e<strong>in</strong> Array, sondern e<strong>in</strong>en Conta<strong>in</strong>er, der folgende<br />

besonderen Eigenschaften besitzt:<br />

• Wir wollen ohne Laufzeite<strong>in</strong>bußen an beliebigen Stellen Elemente e<strong>in</strong>fügen<br />

können.<br />

• Wir wollen ohne Laufzeite<strong>in</strong>bußen Elemente von beliebigen Stellen wieder<br />

entfernen können und die verbliebenen Elemente sollen “nachrücken”.<br />

Dass wir bei diesen Forderungen mit e<strong>in</strong>em Vektor nicht mehr weit kommen,<br />

ist leicht e<strong>in</strong>zusehen. Wir brauchen hier e<strong>in</strong>e verkettete Liste, denn<br />

nur diese Datenstruktur kann die notwendigen Eigenschaften bieten. Erwartungsgemäß<br />

f<strong>in</strong>det sich e<strong>in</strong>e solche <strong>in</strong> der STL als list Template. Diese Liste<br />

stellt die Methoden <strong>in</strong>sert, erase und clear zur Verfügung um Elemente<br />

an e<strong>in</strong>er bestimmten Stelle e<strong>in</strong>zufügen, zu entfernen und die gesamte Liste<br />

zu leeren. Erwartungsgemäß weiß auch e<strong>in</strong>e Liste wieder über die Anzahl<br />

der <strong>in</strong> ihr gespeicherten Elemente Bescheid und gibt dieses Wissen bei Aufruf<br />

von size auch preis. E<strong>in</strong>es ist allerd<strong>in</strong>gs bei der Liste bewusst nicht<br />

implementiert: Der Index-Operator, der direkten Zugriff auf e<strong>in</strong> bestimmtes<br />

Element erlauben würde. Dies ist auch e<strong>in</strong>sichtig, denn um e<strong>in</strong>en <strong>in</strong>dizierten<br />

Zugriff zu erreichen, müsste jedes Mal die Liste von e<strong>in</strong>em Ende her bis<br />

zum gewünschten Element durchgegangen werden, was mit e<strong>in</strong>er Komplexität<br />

von O(n) e<strong>in</strong>er ziemlichen Laufzeitkatastrophe gleichkommen würde.<br />

Deshalb wurde nach dem Motto “...und führe uns nicht <strong>in</strong> Versuchung...”<br />

der Index Operator gleich gar nicht implementiert. In e<strong>in</strong>em kurzen Beispiel<br />

sieht die Verwendung der Basisfeatures e<strong>in</strong>er Liste dann folgendermaßen aus<br />

(simple_list_demo.cpp):<br />

1 // s i m p l e l i s t d e m o . cpp − j u s t a simple demo , how to<br />

2 // use the l i s t template<br />

3<br />

4 #<strong>in</strong>clude < l i s t><br />

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

6<br />

7 #<strong>in</strong>clude ” u s e r t y p e s . h”<br />

8<br />

9 us<strong>in</strong>g std : : l i s t ;

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!