Bitsset STL < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:04 Fr 10.06.2011 | Autor: | wieschoo |
Hi,
ich suche soetwas wie den bitset-Datentyp der STL. Diesen Datentyp kann ich leider nicht nehmen, da bei mir bitset<10000> leider nicht das macht, was es soll. Eine dynamische Lösung wollte ich eigentlich ausschließen, da ich früher oder später sowieso alle 10000 Sachen durchgehen muss.
Gibt es da ne tolle Alternative?
Es sollte eigentlich nur Bits speichern und direkt ansprechen können. Desweiteren brauche ich soetwas, wie OR , reset() , count() (ähnlich dem vom bitset)
reset oder count kann ich vielleicht noch manuell programmerien. Vorgefertigte Lösung sind aber bestimmt schneller.
EDIT: Geht doch. Aber eine Alternative wäre doch besser. Ich glaub nicht, das bitset für soetwas ausgelegt ist.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:01 Sa 11.06.2011 | Autor: | felixf |
Moin!
> ich suche soetwas wie den bitset-Datentyp der STL. Diesen
> Datentyp kann ich leider nicht nehmen, da bei mir
> bitset<10000> leider nicht das macht, was es soll. Eine
> dynamische Lösung wollte ich eigentlich ausschließen, da
> ich früher oder später sowieso alle 10000 Sachen
> durchgehen muss.
>
> Gibt es da ne tolle Alternative?
>
> Es sollte eigentlich nur Bits speichern und direkt
> ansprechen können. Desweiteren brauche ich soetwas, wie OR
> , reset() , count() (ähnlich dem vom bitset)
Was soll diese Alternative denn von std::bitset<> unterscheiden? Bzw. was soll sie koennen, was std::bitset<> nicht kann?
> EDIT: Geht doch. Aber eine Alternative wäre doch besser.
> Ich glaub nicht, das bitset für soetwas ausgelegt ist.
Was genau meinst du mit "soetwas"? Du musst schon genauer sagen was du haben willst und vor allem was das was du haben willst von std::bitset<> unterscheiden soll.
LG Felix
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:37 So 12.06.2011 | Autor: | wieschoo |
> Was genau meinst du mit "soetwas"? Du musst schon genauer
> sagen was du haben willst und vor allem was das was du
> haben willst von std::bitset<> unterscheiden soll.
Hi,
erst einmal danke für deine Antowrt. Mit "soetwas" meine ich wie
1: | bitset<5000000000> data;
| 2: | data &= 0xfff; | diese UND-Verknüpfung geht leider nur, wenn ich mehrere bitset-Variablen habe. Allerdings wird da mein Speicher sehr knapp.
Mir würde ja auch schon soetwas wie
1: | bitset<5000000000> data,data2;
| 2: | data2 = 0xfff;
| 3: | data &= data2; | helfen, da ich am Ende eine Bitsetvariable über habe.
Konkret habe ich genau 3 von diesen Bitset-Variablen data1,data2,data3 und möchte jetzt bei data2,data3 alle Bits ab einer Stelle n mit 0 belegen,z.B.
data1 = "11101000100011|1110011001 ...."
wird zu
data1 = "11101000100011|0000000000 ...."
Bis jetzt mache ich das in einer Schleife. Geht zwar auch. Aber wenn ich schon mit Bits arbeite, dann hätte ich gedacht, dass man einfach ein logisches UND mit einem "hardcoded" Integer macht, wie halt
data &= 0xfff;
Anscheinend ist das nicht vorgesehen.
Kennt sich da jemand vielleicht damit aus. Google ist in diesem Fall auch nicht mein Freund.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:43 So 12.06.2011 | Autor: | felixf |
Moin,
> > Was genau meinst du mit "soetwas"? Du musst schon genauer
> > sagen was du haben willst und vor allem was das was du
> > haben willst von std::bitset<> unterscheiden soll.
>
> erst einmal danke für deine Antowrt. Mit "soetwas" meine
> ich wie
> 1: | bitset<5000000000> data;
| 2: | > data &= 0xfff; | diese UND-Verknüpfung geht leider
> nur, wenn ich mehrere bitset-Variablen habe. Allerdings
> wird da mein Speicher sehr knapp.
>
> Mir würde ja auch schon soetwas wie
> 1: | bitset<5000000000> data,data2;
| 2: | > data2 = 0xfff;
| 3: | > data &= data2; | helfen, da ich am Ende eine
> Bitsetvariable über habe.
>
> Konkret habe ich genau 3 von diesen Bitset-Variablen
> data1,data2,data3 und möchte jetzt bei data2,data3 alle
> Bits ab einer Stelle n mit 0 belegen,z.B.
>
> data1 = "11101000100011|1110011001 ...."
> wird zu
> data1 = "11101000100011|0000000000 ...."
>
> Bis jetzt mache ich das in einer Schleife. Geht zwar auch.
> Aber wenn ich schon mit Bits arbeite, dann hätte ich
> gedacht, dass man einfach ein logisches UND mit einem
> "hardcoded" Integer macht, wie halt
> data &= 0xfff;
>
> Anscheinend ist das nicht vorgesehen.
Weil nicht klar ist was damit gemeint ist. Es koennte ja auch gemeint sein, dass die Maske auf jedes DWord (oder was auch immer die Grundeinheit ist) des bitsets angewendet werden soll.
Du koenntest boost::dynamic_bitset verwenden, und das bitset erst auf 12 Bit zusammenkuerzen (per resize) und dann wieder auf die volle Laenge erweitern (ebenfalls per resize). Beim Erweitern kannst du den Wert fuer die neuen Bits explizit vorgeben.
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:52 Do 23.06.2011 | Autor: | wieschoo |
Danke. Ich lass es doch lieber bei der Schleife.
Das mit dem resize muss ich noch einmal ausprobieren.
|
|
|
|