2013-01-21 7 views
8

Sto facendo una domanda su array in cui devo trovare elementi unici. Ora per questo la mia logica è trovare l'elemento massimo nell'array e definire il set di bit per quello. Ma il problema è bitset ha bisogno di un valore costante quindi come superare questo, di seguito sono alcune delle mie domande su questo:Bitet dimensione variabile

a) Posso, per caso, definire il bitset con una dimensione variabile?
b) In caso negativo, qual è l'approccio migliore per utilizzare vector<bool> o vector<char>?
c) So che boost ha un bitset dinamico ma, come sto facendo per l'apprendimento, voglio conoscere approcci alternativi.

+2

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

risposta

8

Il modello std::bitset<N> richiede una dimensione fissa in anticipo. Lo std::vector<bool> è lo standard C++ per fornire un bitvector a lunghezza variabile e offre funzionalità simili a un set di bit che può aumentare e restringersi.

Per quanto riguarda se è meglio o peggio di utilizzare vector<char> o vector<bool>: il vector<bool> è un modo molto più diretto di realizzare questo obiettivo. Vorrei iniziare usandolo, quindi passare a vector<char> se la prestazione non è accettabile. In generale, è bene provare prima a scrivere l'implementazione più pulita e più semplice, quindi a ottimizzare in seguito.

Spero che questo aiuti!

+0

Grazie per la rapida risposta .. :) ... okay, questo significa che bitset deve essere usato solo quando le dimensioni sono note in anticipo ..? – JackSparrow

+0

@ Himank- È un'affermazione più forte - 'std :: bitset' * can * può essere usato solo quando la dimensione è nota staticamente. – templatetypedef

+0

Grazie ancora ..! e un altro dubbio quale sarebbe l'approccio migliore in vettoriale (bool) e vettoriale (char) per questo tipo di domanda quando ho solo bisogno di trovare univoco quando la dimensione non è nota ...? – JackSparrow