2013-01-21 16 views
8

Ćwiczę pytanie na tablicy, w której muszę znaleźć unikalne elementy. Moja logika polega na znalezieniu elementu max w tablicy i zdefiniowaniu dla niego bitsetu. Ale problemem jest bitset potrzebujący stałej wartości, więc jak sobie z tym poradzić, poniżej kilka moich pytań na ten temat:Bitset o zmiennym rozmiarze

a) Czy mogę przypadkiem zdefiniować bitset o zmiennej wielkości?
b) Jeśli nie, to jakie jest najlepsze podejście do korzystania z vector<bool> lub vector<char>?
c) Wiem, że funkcja boost ma dynamiczny bitset, ale ponieważ robię to dla uczenia się, chcę wiedzieć o alternatywnych podejściach.

+2

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

Odpowiedz

8

Szablon std::bitset<N> wymaga wcześniejszego ustalonego rozmiaru. std::vector<bool> jest standardem C++ dostarczania bituvector o zmiennej długości i oferuje funkcjonalność podobną do zestawu bitów, który może się rozwijać i zmniejszać.

Jeśli chodzi o lepsze lub gorsze używanie vector<char> lub vector<bool>: vector<bool> jest o wiele bardziej bezpośrednim sposobem osiągnięcia tego celu. Zacznę od używania go, a następnie przełączam na vector<char>, jeśli wydajność jest niedopuszczalna. Ogólnie rzecz biorąc, dobrze jest najpierw napisać najczystszą, najprostszą implementację, a następnie zoptymalizować później.

Mam nadzieję, że to pomoże!

+0

Dzięki za szybką odpowiedź .. :) ... ok, to oznacza, że ​​bitset powinien być używany tylko wtedy, gdy rozmiar znany wcześniej ..? – JackSparrow

+0

@ Himank - To silniejsze twierdzenie - 'std :: bitset' * can * może być używany tylko wtedy, gdy rozmiar jest znany statycznie. – templatetypedef

+0

Jeszcze raz dziękuję! i jeszcze jedna wątpliwość co byłoby najlepszym podejściem w wektorach (bool) i wektorze (char) dla tego typu pytań, kiedy po prostu muszę znaleźć unikalne, gdy rozmiar nie jest znany ..? – JackSparrow

Powiązane problemy