bool Mysterium



  • hustbaer schrieb:

    drakon schrieb:

    Du verwechselst da den () mit dem [] Operator.

    Du legst da kein Array von 13 bool an, sondern ein bool mit dem Wert 13..

    Nö, sondern nen bool mit dem Wert 1.

    🙂
    Ja, sagen wir so: Er versucht ein bool mit dem Wert 13 zu initialisieren. 🙂



  • "Ein bool wird mit dem Wert einer in den Zieltyp konvertierten 13 initialisiert"



  • Danke: alles klar - dummer Fehler, Klammern verwechselt.

    Da hätte der Compiler aber mal drauf aufmerksam machen können, ich compiliere schließlich mit -Wall

    gibt es einen gcc switch, der solche impliziten Konvertierungen anmahnt ?



  • u_ser-l schrieb:

    Da haette der Compiler aber mal drauf aufmerksam machen koennen, ich compiliere schliesslich mit -Wall

    es ist ja kein Fehler und auch nichtmal zweideutig...er macht exakt das, was du ihm gesagt hast, du hast ihm nur das falsche gesagt 😉

    haettest du einen vector verwendet, waer das nich passiert

    an std::vector<bool> y( 13 ); kann man nicht viel falsch machen, ohne das der Compiler meckert 😉



  • ich brauche allerdings äußerst performante Datenstrukturen, denn die Algorithmen werden exponentiell in der Bitlänge laufen, bei Bitlängen zw. 100 und 1000 - bremst vector<bool> da nicht etwas ?



  • gibt es g++ switches, die solche impliziten Casts sicher aufdecken? -Wall -pedantic hat jedenfalls in diesem Fall nicht gemuckt.



  • u_ser-l schrieb:

    ich brauche allerdings äußerst performante Datenstrukturen, denn die Algorithmen werden exponentiell in der Bitlänge laufen, bei Bitlängen zw. 100 und 1000 - bremst vector<bool> da nicht etwas ?

    dann nimm vector<char>



  • u_ser-l schrieb:

    ich brauche allerdings äußerst performante Datenstrukturen, denn die Algorithmen werden exponentiell in der Bitlänge laufen, bei Bitlängen zw. 100 und 1000 - bremst vector<bool> da nicht etwas ?

    Schau dir mal std::bitset an.



  • tatsächlich, bitset sieht gut aus, das werde ich mir mal näher ansehen.



  • bei einer länge von max. 1000 wird wohl nichts schneller sein als ein char-array.
    wenn es eine absolute obere schranke gibt ggf. auch gleich aufm stack.
    ansonsten std::vector<char>.

    std::vector<bool> und std::bitset<N> sind gut zum platz sparen, aber nicht unbedingt für performance-kritischen code.

    aber einfach mal ausprobieren...



  • dank OO-Datenkapselung kann ich leicht
    bitset
    char-array
    vector<bool>
    vector<char>
    bool-array
    vergleichen. Ich vermute auch, daß char-array am schnellsten ist, zumindest solange die ~87% Platzverschwendung nicht zu übermäßigem Speichertraffic führen.



  • genau, solange alles noch in den L1 cache passt auf jeden fall



  • die Bit-Tupel sind bei der Problemstellung ohnehin nur der einfachste Spezialfall für erste Tests, letztendlich brauche ich allgemeine Tupel über {0,..,p-1} mit kleinem p=2,3,5,..., und dann wird sich der ungenutzte Platz pro char noch verringern 🙂


Anmelden zum Antworten