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 509<br />

Wie bei map ist auch bei set e<strong>in</strong> duplicate Key nicht zulässig und analog<br />

zur multimap gibt es auch für Fälle, <strong>in</strong> denen dieses Verhalten benötigt wird<br />

e<strong>in</strong> multiset. Neben diesem gibt es noch e<strong>in</strong>e weitere besondere Art e<strong>in</strong>es<br />

Sets, das sich <strong>in</strong> der Praxis als sehr brauchbar erweist: Das Bit-Set, das als<br />

bitset Template zur Verfügung steht. Oft hat man, aus welchen Gründen<br />

auch immer, e<strong>in</strong>e gewisse Anzahl von boolschen Variablen, die verschiedene<br />

Teilzustände repräsentieren. Jede dieser Variablen speichert im Pr<strong>in</strong>zip<br />

nur e<strong>in</strong> e<strong>in</strong>ziges Bit an Information, jedoch wird e<strong>in</strong> x-faches an Speicherplatz<br />

dafür verbraucht (je nach Compiler und Architektur zwischen 8 und<br />

32 Bits). Bei Objekten, die vielfach im Programm vorkommen, kann das<br />

schon zur groben Speicherverschwendung entarten. Arbeitet man jedoch mit<br />

e<strong>in</strong>em bitset, so kann man dies leicht <strong>in</strong> den Griff bekommen, ohne auf den<br />

Gebrauch von Bitmasken per Hand zurückgreifen zu müssen. Wie dies <strong>in</strong> der<br />

Praxis aussehen könnte, sieht man an folgendem Beispiel:<br />

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

2 // use a b i t s e t<br />

3<br />

4 #<strong>in</strong>clude < b i t s e 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 : : b i t s e t ;<br />

10<br />

11 us<strong>in</strong>g std : : cout ;<br />

12 us<strong>in</strong>g std : : endl ;<br />

13<br />

14 static const u<strong>in</strong>t32 INITIALIZED BIT = 0;<br />

15 static const u<strong>in</strong>t32 BROKEN BIT = 1;<br />

16 static const u<strong>in</strong>t32 OPEN HANDSHAKE BIT = 2;<br />

17 static const u<strong>in</strong>t32 ALIVE BIT = 3;<br />

18 static const u<strong>in</strong>t32 CLOSE HANDSHAKE BIT = 4;<br />

19 static const u<strong>in</strong>t32 CLOSED BIT = 5;<br />

20 static const u<strong>in</strong>t32 NUM BITS = 6;<br />

21<br />

22 <strong>in</strong>t ma<strong>in</strong> ( <strong>in</strong>t argc , char ∗ argv [ ] )<br />

23 {<br />

24 b i t s e t c o n n e c t i o n s t a t u s = 0x0 ;<br />

25<br />

26 c o n n e c t i o n s t a t u s [ INITIALIZED BIT ] = 1 ;<br />

27 c o n n e c t i o n s t a t u s [ ALIVE BIT ] = 1 ;<br />

28<br />

29 cout ”

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!