C++ Wahlprogramm
-
1. Wozu noch die for-Schleife? Die ist doch unnötig.
2. Was passiert denn bei << endl?
-
Ohne die for-Schleife wird nur noch die erste Partei angezeigt.
"endl", stimmt, danke!
-
...
-
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 duvoidinmain()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_votesin 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_votesin 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_votesin 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_nhabe 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?

-
...