Kleiner Datentyp gesucht bzw. programmieren



  • @Dimah
    Wie bildet man die bools den bitweise beim speichern ab,
    also mit Strukturen und Bitfeldern bekomme ich es nicht hin 😞

    Nun wollte ich noch einen std::vector mehrdimensional machen nur irgendwie akzeptiert mein Compiler folgende Form nicht
    std::vector<std::vector<char>> c;
    sieht doch eigentlich korrekt aus ?

    : error C2146: Syntaxfehler : Fehlendes ',' vor Bezeichner 'c'
    k:\vc6_projekte\mecharena\neu\01\map.h(58) : error C2065: 'c' : nichtdeklarierter Bezeichner
    k:\vc6_projekte\mecharena\neu\01\map.h(58) : error C2143: Syntaxfehler : Fehlendes '>' vor ';'
    k:\vc6_projekte\mecharena\neu\01\map.h(58) : error C2208: 'class std::vector' : Keine Elemente definiert, die diesen Typ verwenden



  • Original erstellt von Real_PsychoDAD:
    **
    std::vector<std::vector<char>> c;
    **

    [/QUOTE]

    Tja, da bist du auf einen "peinlichen Designfehler" gestossen.
    Loesung:
    std::vector<std::vector<char> > c;



  • Ja, das stimmt schon. Aber HumeSikkins hat mir einmal erklärt, dass man std::vector<bool> nicht verwenden soll um einen Vektor von boolschen Werten zu erstellen.

    Ich schätze mal, dass ich eher sowas gesagt habe 😉

    Bevor man einen vector<bool> verwendet, sollte man sich genau anschauen, was das eigentlich ist. Dann sollte man sich darüber im Klaren sein, dass diese Spezialisierung nicht die Anforderungen an einen STL-Container erfüllt, das dieser Container keine bools speichert und das einem hier außerdem eine bestimmte Optimierung auf's Auge gedrückt wird.

    Nur wenn man das alles weiß und wenn man sich sicher ist, dass ein vector<bool> genau das ist, was man braucht, dann sollte man ihn verwenden. Allerdings sollte man vorher nocheinmal prüfen, ob ein std::bitset nicht auch gehen würde.

    Im Allgemeinen Fall aber sollte man statt der Spezialisierung vector<bool> lieber einen vector<char> oder einen deque<bool> verwenden.



  • Original erstellt von Real_PsychoDAD:
    **Nun wollte ich noch einen std::vector mehrdimensional machen nur irgendwie akzeptiert mein Compiler folgende Form nicht
    std::vector<std::vector<char>> c;
    sieht doch eigentlich korrekt aus ?
    **

    std::vector<std::vector<char> > c; //das leerzeichen ist wichtig
    

    um bools auf bit ebene zu speichern gibts mehrer wege, ein leichter ist vector<bool>, obwohl ein bool i.d.r. 1 byte gross ist speichert vector<bool> ein bool pro bit das kann es nur da durch das es in wirklich keit keine richtigen bools speichert es macht ehr ein paar rechen operationen, man spart zwar speicher aber es wird langsammer,

    bitset<32> und die funkion to_ulong() sind deine freunde

    e: ups diesam mal war ich aber ziemlich langsamm

    [ Dieser Beitrag wurde am 26.06.2002 um 23:35 Uhr von Dimah editiert. ]



  • hm na da hat er doch wohl Recht 🙂
    und bei nur 4zustaenden duerft sich da ja recht ordentl kompremieren lassen, oder?



  • Gemeine Falle mit dem mehrdimensionalen std::vector 🙂
    Gibt's da irgendeinen Grund für ?



  • ja >> ist ein operator, hätten sie aber eigentlich lösen können, wenn ein mench erkennen kann das es sich um ein template instanzierung handelt sollte der compiler es auch können



  • Gibt's da irgendeinen Grund für ?

    Ja. Er heißt maximal munch. Einfach mal bei google eingeben. Der erste Link ist bereits sehr interessant.

    @Dimah
    Immer auf die armen Compilerbauer 😞
    Die C++ Grammatik ist sowieso schon so gemein.

    [ Dieser Beitrag wurde am 27.06.2002 um 13:51 Uhr von HumeSikkins editiert. ]



  • achso, thx



  • gabs da nicht mal die Möglichkeit, das mit einer Union zu machen

    struct Y
    {
       int LO2 : 2;
       int LO4 : 2;
       int HI6 : 2;
       int HI8 : 2;
    };
    union X
    {
       int GanzerInt;
       Y TeilInts;
    };
    

    kommt ein bisschen spät aber egal


Anmelden zum Antworten