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 wie

    try 
    { 
      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 werden

    Was 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.


Anmelden zum Antworten