bitset statt vector<bool>?
-
ich nutze jetzt einen std::vector<int> statt einem std::vector<bool>. Dürfte sich vom Speicherbedarf ja nicht groß unterscheiden.
Tschau Gartenzwerg
-
Der Unterschied sind 31Bits pro Wert.
Wäre es nicht möglich, dass du dir ne eigene Swap Funktion schreibst? Müsstest ja nur zwei Iteratoren an deine Funktion übergeben, diese liest die Werte aus und macht den klassischen Dreieckstausch.
-
Shade of Mine schreibt:
Hat vector<bool> denn ein at?
btw: man verwendet at sowieso nicht - sondern man verwendet immer den operator[] - wir sind ja nicht bei Java
Also darüber würde gern mal diskutieren.
Wer Konstrukte wietry { for(...) { do_something(v.at(i)); } } catch(...) {}
verwendet hat sowieso nichts besseres verdient als das er/sie ewig und drei Tage nach einen Indexüberlauf sucht. :p
Ich selbst bevorzuge den Zugriff per .at überall da wo es nicht performance-kritisch ist. Und wer mir im Rahmen eines Funktionsaufruf mit nem ungültigen Index-Wert ankommt der kriegt vom mir die Orignal-Exceptiption um die Ohren gehauen, weil ich keine Lust habe die immer wieder gleiche Indexprüfung in den Code reinzuhämmern.
mfg JJ
-
Weil ich mir noch nicht genug Feinde gemacht hab.
SriLant schriebt:
Noch nen tipp, wenn ihr einen Container wie vector durchläuft, macht folgendes:
int size = vec.size (); // einmal Größe abfragen
for (int i = 0; i < size; i++) // hier muss nicht jedesmal die größe erneut ermitteln werdenWas hälst du von der Verwendung von Iteratoren ? Warum ne Sonderabhandlung für Vektoren ? Weshalb nicht das gleiche Verfahren wie bei allen anderen STL-Containern ?
mfg JJ
-
weil die vector Klasse auf sowas optimiert wurde?
-
31 Bit Unterschied? bool hat doch nicht nur 1 Bit oder?
Tschau Gartenzwerg
-
bool kann nur 0/1 sein, also 1 bit
-
ich glaube, da irrst du. Auf meinem Linux sieht es wie folgt aus:
sizeof(bool); // liefert 1 => 1 Byte sizeof(char); // liefert 1 => 1 Byte sizeof(int); // liefert 4 => 4 Byte
Kann sein, dass der vector<bool> auf ein Bit optimiert wurde!? Doch das normale bool hat min. 1 Byte. Vielleicht sollte ich dann anstatt vector<int> einen vector<char> nehmen.
Tschau Gartenzwerg
-
Kann sein, dass der vector<bool> auf ein Bit optimiert wurde!?
Ja.
http://www.gotw.ca/publications/mill09.htm
std::vector<bool> is not a container
-
Gartenzwerg schrieb:
ich glaube, da irrst du. Auf meinem Linux sieht es wie folgt aus:
sizeof(bool); // liefert 1 => 1 Byte sizeof(char); // liefert 1 => 1 Byte sizeof(int); // liefert 4 => 4 Byte
Kann sein, dass der vector<bool> auf ein Bit optimiert wurde!? Doch das normale bool hat min. 1 Byte. Vielleicht sollte ich dann anstatt vector<int> einen vector<char> nehmen.
Tschau Gartenzwerg
kann sizeof kleinere werte als 1 zurückliefern? nein? oh,dann is ja klar, wieso bool garantiert ein byte groß ist
-
Der Typ bool ist auf vielen Systemen 1Byte groß, jedoch haben Compiler auch
die Möglichkeit mehrere bools in ein Byte zu stecken.vector<bool> ist jedoch nicht ein Container für bools (siehe den Lin weiter oben)
sondern eine spezialisierung für diesen Typ wodurch es einem bitset gleich kommt.vector<bool> ist im Standard unter 23.2.5 zu finden.
-
Hoppla hat es doch trotz des Fehlers mein Posting reingesetzt.