bitset statt vector<bool>?
-
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.