2016-05-21 5 views
1

Ich habe einige Codierung Beispiele gesehen, die eine unsigned int empfehlen die Verwendung eines Bitmap darzustellen:Verwendet unsigned int anstelle von std :: vector <bool> oder std :: bitset eine empfohlene Praxis?

unsigned int zero_rows {0}; 
for (auto i = 0; i < n_rows; ++i) { 
    zero_rows |= (1 << i); 
    … 
} 

dies einen Vorteil gegenüber der Verwendung std::vector<bool> bieten Enthält:

std::vector<bool> zero_rows(n_rows, false); 
for (auto i = 0; i < n_rows; ++i) { 
    zero_rows[i] = true; 
    … 
} 

Eine andere Option, die ich std::bitset sein erraten konnte, aber ich bin nicht wirklich sicher über die Vor- und Nachteile von jedem noch. Ich möchte nur wissen, was die empfohlene Praxis ist.

+0

Ein 'unsigned int' ist 4 Bytes, aber ein' std :: vector 'kann darüber hinausgehen. – Charles

+0

Eigentlich muss ein 'unsigned int' nur 16 Bits enthalten, und ein Byte in C++ ist nicht (unbedingt) 8 Bits - es ist die Größe eines' char' ... was einige Plattformen als 64 Bits haben. –

Antwort

3

Die Verwendung einer gewissen Größe von unsigned integer eine fester Größe Folge von Bits darzustellen war die einzige Möglichkeit, in C++ vor 1998 Norm, wenn std::vector<bool> und std::bitset eingeführt wurden. Die Praxis wurde von C geerbt, in der es als ein kompetenter Programmierer Kenntnisse gilt und es bleibt so in C++ berücksichtigt.

std::vector<bool> ist mit Bedauern zu betrachten. Siehe z.B. vector<bool>: More Problems, Better Solutions und Effective STL Item 18. std:::bitset gilt als geeignet für den Zweck.

Die unsigned integer Praxis stellt von Natur aus einer handgerollte Simulation von einer festen Größe Bit-Sequenz, die durch offene artifice, eingeschränkt und erschwert durch die Tatsache, dass es nur wenige Größen von unsigned integer sind (auch wenn die gewählt Größe wird genau gemacht). Wenn Sie eine feste Bitsequenz benötigen, die für Operationen ist, die alle von der interface of std::bitset unterstützt werden, dann ist die Standardbibliotheksvorschrift anderen Dingen vorzuziehen, die aus allen Gründen dem handgesteuerten Code vorzuziehen ist Die Bibliothek verdankt ihre Existenz.

Sie müssen der Richter sein, ob im Rahmen Ihrer Anwendung andere Dinge gleich sind.

+0

Ausgezeichnete Antwort. Sehr geschätzt. Es ist schwer, prägnante historische Perspektiven wie deine zu finden :) – nachocab

Verwandte Themen