C++ Wahlprogramm



  • ...



  • make_vector( 
            party_t( "CDU" ) ), 
            party_t( "SPD" ), 
            party_t( "GRUENE" ), 
            party_t( "FPD" ) 
        )
    

    Das ist furchtbar. 😉 👎

    party_t parties[] = { party_t("CDU"),
                              party_t("SPD"),
                              party_t("GRUENE"),
                              party_t("FPD") };
    
        election_t election( std::vector<party_t>(parties, parties + sizeof(parties) / sizeof(*parties)) );
    

    Und: Du nutzt Templates für deine "Krücke", machst aber keinen Iteratoren-Paar Ctor für election_t ?
    Wieso ist der party_t Konstruktor nicht explicit? Wieso hast du void in main() s leerer Parameterliste stehen?
    Und: Die C++11-Krücke ist in dem Code sinnfrei, da du range-based for verwendest.

    for( unsigned i = 5; i < static_cast< unsigned >( percent + .5 ); i += 5 ) // static_cast dafür? 
                os.put( '#' );
    

    ➡

    os << std::string( std::max<int>(0, percent / 5 - 0.9) , '#'); // Hmm. Hier bin ich mir nicht ganz sicher. Richtig umgeformt... ?
    

    Außerdem teilst du durch 0 wenn total_votes in Zeile 76 null ist.



  • Sone schrieb:

    os << std::string( std::max<int>(0, percent / 5 - 0.9) , '#'); // Hmm. Hier bin ich mir nicht ganz sicher. Richtig umgeformt... ?
    

    NEIN! Das ist unnötige Speicherverschwendung!

    Besser:

    // bin mir auch nicht sicher
    std::fill_n(std::ostreambuf_iterator<char>(std::cout), std::max<int>(5, percent + .5) - 5, '#');
    

    Ich finde es auch komisch, Jeder Partei eine Zahl zu geben. Ich wähle für DMP (deutsche Musterpartei), nicht für die Zahl 3.



  • ...



  • Swordfish schrieb:

    Sone schrieb:

    Außerdem teilst du durch 0 wenn total_votes in Zeile 76 null ist.

    Wer Wahlen mit 0 Wahlbeteiligung auswerten will gehört bestraft.

    YMMD 👍



  • Swordfish schrieb:

    Sone schrieb:

    Außerdem teilst du durch 0 wenn total_votes in Zeile 76 null ist.

    Wer Wahlen mit 0 Wahlbeteiligung auswerten will gehört bestraft.

    Sag das mal Deutschland. Huehuehue! 🙂

    Swordfish schrieb:

    Sone schrieb:

    make_vector( 
            party_t( "CDU" ) ), 
            party_t( "SPD" ), 
            party_t( "GRUENE" ), 
            party_t( "FPD" ) 
        )
    

    Das ist furchtbar. 😉 👎

    weil ... ?

    Die Klammersetzung ist unintuitiv. Das Teil hat einen Overhead, weil mehrere male neu allokiert werden muss. Der Konvertierungsoperator gibt eine Kopie zurück, ist aber nicht const -qualifiziert.
    (Gib eine Referenz zurück. Dann kann auch gemoved werden).

    Weil ich den rest des Tages am C-frickeln bin.

    Du geilst mich an.

    Wichtig?

    Perfektionist?

    Erzähl das dem MSVC CTP Nov '12 ...

    Kann ich nicht. Ich arbeite unter Linux. Ab gestern. Huehuehue! 🙂
    (Auf Windows ist aber natürlich auch das CTP druff)

    std::fill_n(std::ostreambuf_iterator<char>(std::cout), std::max<int>(5, percent + .5) - 5, '#');

    Das ist tatsächlich schöner. Merk ich mir. ( fill_n habe ich aber auch schon vergessen)



  • ...



  • Gib eine Referenz zurück. Dann kann auch gemoved werden

    Doch, ist richtig. Dann, und nur dann kann auch gemoved werden. Sonst wird min. 1 mal kopiert.

    Falls das irgendwie was bringen soll - wenn der Compiler schon RValue-Referenzen und Move-Semantik unterstützt...



  • explicit election_t( party_t const * first,  party_t const * last )
    

    Mit party_t Konstruktor meinte ich den von party_t .
    Mit initializer-lists geht es allerdings auch hier implizit. Daher macht es evt. auch hier Sinn.

    void vote_for() { ++votes; }
    

    Ok, ich hab einen - wie wäre es mit überladen des Inkrement-Operators? 😃



  • ...


Anmelden zum Antworten