Die Grosse des Container list
-
Hi,
bitte um die Antwort auf allgemeine Frage: Wie gross dürfen die Container sein
(oder wieviele Elemente können sie speichern)?Und die zweite Frage: Ist die Methode void unique() für list<> zufährlasig, oder ist es der Algorithmus unique(..) besser?
Eigentlich habe ich den Containert list<CBeleg> (sizeof(CBeleg) = 128)
verwendet und die Methode list<CBeleg> Obj.unique() entfernt nicht alle gleiche
Objekte. sort() funktioniert noch.Vermutlich wird der list mehrere Tausend Elemente haben.
Danke schön
-
die maximale größe findest du mit max_size() heraus:
http://www.cplusplus.com/reference/stl/list/max_size/zu 2) wenn die Methode nciht zuverlässig wäre hätte sie wenig Sinn oder? Du kannst sie getrost benutzen.
rosic schrieb:
Eigentlich habe ich den Containert list<CBeleg> (sizeof(CBeleg) = 128)
verwendet und die Methode list<CBeleg> Obj.unique() entfernt nicht alle gleiche
Objekte. sort() funktioniert noch.Dann wird der Grund ein anderer sein. Zeigst du uns etwas Code?
-
Danke pumuckl (die Größe verursacht das Problem nicht)
und deswegen etwas des Codes:class CBeleg { private: string KontoNr; CDatum buchungDatum; CDatum valutaDatum; double dBetrag; string strBetrag; string buchungText; public: CBeleg(){} void setBeleg(char* buffer); const CDatum& get_buchungDatum(); string get_buchungText(); double anzeigen(); void schreiben(); friend bool operator <(const CBeleg& BObj1, const CBeleg& BObj2); friend bool operator ==(const CBeleg& BObj1, const CBeleg& BObj2); }; ... bool operator ==(const CBeleg& BObj1, const CBeleg& BObj2) { if ((BObj1.buchungDatum == BObj2.buchungDatum) && (BObj1.valutaDatum == BObj2.valutaDatum) && (BObj1.KontoNr == BObj2.KontoNr) && (BObj1.dBetrag == BObj2.dBetrag) && (BObj1.buchungText == BObj2.buchungText)) return true; else return false; } list<CBeleg> CBelegKonto::get_belege() { return this->belege; } void CBelegKonto::set_belege(list<CBeleg>& belege) { this->belege = belege; } ... switch(Home.Y) { case MENU_START_LINE: { neuDateiLesen(); alleBelege.set_belege(setAlleBelege()); list<CBeleg> belege = alleBelege.get_belege(); belege.sort(); belege.unique(); alleBelege.set_belege(belege); alleBelege_anzeigen(alleBelege); centraleD_neuWrite(alleBelege); break; }Ich hab jetzt den Fehler (Ueberweisung != Überweisung) und vorher waren mehrere
Anweisungen in case: ohne {}Trotzdem ist jeder Kommentar des Codes willkommen
Danke
-
Bite noch eine Frage:
ich habe kein
operator=() für this->belege = belege;und trotzdem kein Fehler (????)
Danke
-
double dBetrag; string strBetrag;nimm nur
double Betrag;und wandel es halt um, wenn du es als string brauchst
brauchst du es genauer als cent? wenn nicht, würde ich dir raten: nimm int oder long oder so und gib die cent an.CBeleg(){}das ist unnötig - wäre nur nötig, wenn du noch nen anderen konstruktor definiert hättest (was ich übrigens machen würde)
void setBeleg(char* buffer);naja - ich würde nicht verstehen, was hier passiert
char* buffersieht auch so aus, als ob nen const fehlen würdeconst CDatum& get_buchungDatum(); string get_buchungText();wieso denkst du beim datum daran, es per const ref zu übergeben und beim buchungstext nicht? Oo
und: "const correctness"double anzeigen(); void schreiben();was?
public: friend bool operator <(const CBeleg& BObj1, const CBeleg& BObj2); friend bool operator ==(const CBeleg& BObj1, const CBeleg& BObj2); };hm? 1. wieso friend
2. wieso machst du op== nicht über!(lhs<rhs) && !(rhs<lhs)?
3. wieso brauchst du nen op< ? wie soll man belege ordnen können? nach datum? nach betrag? nach ktonr? würde ich in nen comparer-struct auslagern glaub ichbool operator ==(const CBeleg& BObj1, const CBeleg& BObj2) { if ((BObj1.buchungDatum == BObj2.buchungDatum) && (BObj1.valutaDatum == BObj2.valutaDatum) && (BObj1.KontoNr == BObj2.KontoNr) && (BObj1.dBetrag == BObj2.dBetrag) && (BObj1.buchungText == BObj2.buchungText)) return true; else return false; }->
bool foo() { if(true) return true; else return false; }fällt dir was auf? ^^
return this->belege;wieso schreibst du hier das this mit?
Trotzdem ist jeder Kommentar des Codes willkommen
ich hoffe, es war nicht so viel, dass du die lust verlierst^^
kannst dich ja wieder melden, wenn du das so weit gemacht hast und dann kann man ja noch ma drüber gucken und auch noch den rest bemängeln ;o)bb
PS: kopierkonstruktor und zuweisungsoperator werden vom compiler automatisch generiert.
ist hier auch vollkommen ausreichend, was der tut^^
-
Danke unskilled
(der Übergang von COBOL(Lebensversicherung) zu OOP braucht noch
die Arbeit an sich)