2013-01-21 11 views
8

Ich übe eine Frage über Array, in der ich einzigartige Elemente finden muss. Nun ist es meine Logik, das maximale Element im Array zu finden und das Bitset dafür zu definieren. Aber Problem ist bitset braucht einen konstanten Wert, so wie dies zu überwinden, sind unten einige meiner Frage zu diesem Thema:Bitset variabler Größe

a) Kann ich zufällig das Bitset mit einer variablen Größe definieren?
b) Wenn nicht, was ist der beste Ansatz, um vector<bool> oder vector<char> zu verwenden?
c) Ich weiß Boost hat ein dynamisches Bitset, aber da ich das zum Lernen mache, möchte ich alternative Ansätze kennenlernen.

+2

Siehe [Boost.DynamicBitset] (http://www.boost.org/libs/dynamic_bitset/). – ildjarn

Antwort

8

Die Vorlage std::bitset<N> erfordert im Voraus eine feste Größe. Die std::vector<bool> ist die Art und Weise des C++ - Standards, einen Bitvektor mit variabler Länge bereitzustellen, und er bietet Funktionen, die einem Bitsatz ähneln, der wachsen und schrumpfen kann.

Ob es besser oder schlechter ist zu verwenden vector<char> oder vector<bool>: die vector<bool> ist eine viel direktere Möglichkeit, dieses Ziel zu erreichen. Ich würde damit beginnen, es zu verwenden, dann wechseln Sie zu vector<char>, wenn die Leistung nicht akzeptabel ist. Im Allgemeinen ist es gut zu versuchen, zuerst die sauberste und einfachste Implementierung zu schreiben, um sie später zu optimieren.

Hoffe, das hilft!

+0

Danke für die schnelle Antwort .. :) ... okay das heißt Bitset sollte nur verwendet werden, wenn Größe vorher bekannt ist ..? – JackSparrow

+0

@ Himank- Es ist ein stärkerer Anspruch - 'std :: bitset' * kann * nur verwendet werden, wenn die Größe statisch bekannt ist. – templatetypedef

+0

Danke nochmal ..! und noch ein Zweifel, was wäre der beste Ansatz in Vektor (bool) und Vektor (char) für diese Art von Frage, wenn ich nur einmal finden muss, wenn Größe nicht bekannt ..? – JackSparrow