Vektor mit 0 initialisiert, aber keine drin?



  • Hi leute!

    ich initialisiere einen vektor mit:

    vector<double>list;

    und schreibe mit:

    list.assign(Anzahl, 0);

    Nullen hinein.

    wenn ich mir den vektor dann ausgebe steht aber statt 0 eine 5.28318e-308 drin!
    weis jemand woran das liegt? (evtl die Geneuigkeit von double?).
    Lustigerweise ging es ne ganze weile und auf eimal nicht mehr.

    Schonmal danke!



  • Sicher, dass Anzahl>0 ist? Und ich würde eine Variable vom Typ vector nicht "list" nennen 😉



  • ja bin sicher hab anzahl auf 3 und er gibt mir 3 mal diesen komischen wert aus!



  • Zeig mal den gesamten Code. (wenn nötig vereinfacht)



  • HoCiEp3 schrieb:

    Lustigerweise ging es ne ganze weile und auf eimal nicht mehr.

    Was hast du denn "auf einmal" verändert?



  • ok hier die vereinfachte form:

    class vektor{
    private:
    	unsigned int laenge;
    	vector<double>VK;
    public:
            vektor(unsigned int W);
            friend ostream &operator<<(ostream &os, const vektor &name);
    };
    
    vektor::vektor(unsigned int W){
    	laenge=W;
    	VK.assign(W, 0);
    }
    
    ostream &operator <<(ostream &os, const vektor &name){
    	os << "(";
    	for(unsigned int i=0; i<name.laenge; i++){
    		os << name.VK[i] << " ";
    	}
    	os << ")" <<  endl;
    return (os);
    }
    


  • Schließe deinen Code bitte in [cpp] und [/cpp] ein, dann wird der schön formatiert und man hat auch Lust, ihn zu lesen. 🙂



  • @matze
    sorry...anfängerfehler 😃



  • Also bei mir funktioniert das ohne Probleme..



  • hats bei mir anfangs halt auch aber irgenwann nicht mehr...is schon eigenartig...is bestimmt wieder ein voll sinnloser fehler 😕 😕



  • HoCiEp3 schrieb:

    hats bei mir anfangs halt auch aber irgenwann nicht mehr...is schon eigenartig...is bestimmt wieder ein voll sinnloser fehler 😕 😕

    Dann nimm dein funktionierendes Minimalbeispiel und füge stückchenweise alles andere hinzu. Irgendwann findest du den Fehler.



  • HoCiEp3 schrieb:

    ...is bestimmt wieder ein voll sinnloser fehler 😕 😕

    Mach Dir nichts draus ... ist ja auch vollkommen sinnloser Code. :p 😉 😃

    Nur mal zum Design:
    * "laenge" <-> "VK.size()" ?
    * "friend" ist unnötig. Besser: (ggf. Virtuelle) const-Memberfunktion print, die von operator<<() aufgerufen wird....

    Gruß,

    Simon2.



  • an deiner stelle würd ich ma gucken, ob ich iwo nen vergleich machen wollte und ausversehen ein = vergessen hab... hört sich ganz so an ^^

    aber davon abgesehen: wozu brauchst du die klasse? das kann vector doch auch so schon?!
    außer die ausgabe, aber die kann man ja in einer zeile nachbilden:

    std::copy( container.begin(), container.end(), std::ostream_iterator<T>(std::cout, " ") );
    

    wobei T hier double wäre...

    bb



  • unskilled schrieb:

    aber davon abgesehen: wozu brauchst du die klasse? das kann vector doch auch so schon?!

    das ist nur ein teil der klasse, sollte ne klasse Vektor sein für die komplette Vektorrechnung in der alle operatoren für vektoren überladen sind.



  • HoCiEp3 schrieb:

    unskilled schrieb:

    aber davon abgesehen: wozu brauchst du die klasse? das kann vector doch auch so schon?!

    das ist nur ein teil der klasse, sollte ne klasse Vektor sein für die komplette Vektorrechnung in der alle operatoren für vektoren überladen sind.

    Dan schreib doch ne Wrapperklasse, wo du intern einen vector verwendest. Wenn du nur die Funktionalität von vector erweitern willst dann ists Blödsinn das Rad neu zu erfinden. Mal abgesehen davon dass ich mich grade frage was du da für operatoren überladen willst. Das meiste wirds vermutlich schon geben, ohne dass du es vielleicht weißt.



  • Dan schreib doch ne Wrapperklasse, wo du intern einen vector verwendest. Wenn du nur die Funktionalität von vector erweitern willst dann ists Blödsinn das Rad neu zu erfinden. Mal abgesehen davon dass ich mich grade frage was du da für operatoren überladen willst. Das meiste wirds vermutlich schon geben, ohne dass du es vielleicht weißt.

    Das ist gut möglich, dass ich es nur nicht weis!Kann mir aber nicht vorstellen, dass vektor- und skalarprodukt usw. schon bekannt sind!
    und was zum teufel ist ne wrapperklasse...sorry anfänger...



  • In der Standardbibliothek wohl eher nicht. Extra deswegen Boost zu verwenden ist vielleicht auch übertrieben, zumal eine einfache Vektorklasse schnell geschrieben ist und eine gute Übung darstellt.

    Muss sich ein Vektor von der Grösse her verändern können oder ist die Grösse zur Kompilierzeit bekannt? Bei Letzterem könntest du Templates verwenden, dann müsstest du nicht mit Speicherverwaltung rumhantieren.



  • Nexus schrieb:

    In der Standardbibliothek wohl eher nicht. Extra deswegen Boost zu verwenden ist vielleicht auch übertrieben, zumal eine einfache Vektorklasse schnell geschrieben ist und eine gute Übung darstellt.

    Muss sich ein Vektor von der Grösse her verändern können oder ist die Grösse zur Kompilierzeit bekannt? Bei Letzterem könntest du Templates verwenden, dann müsstest du nicht mit Speicherverwaltung rumhantieren.

    ja eigentlich ist die länge schon bekannt!Leider fehlt mir bei templates noch der durchblick, weil wollte den vektor dann noch mit verschiedenen datentypen verwenden - was ja wohl mit templates gemacht wird.



  • Gute Gelegenheit, dich in Templates einzulesen. 😉

    In diesem Artikel findest du eine gute Einführung in die Programmierung mit Templates. Sobald du das Grundprinzip einmal verstanden hast, hast du bereits recht viele Möglichkeiten offen. Wobei das Gebiet der Templates dann noch ins Unendliche weitergeht, zum Beispiel Richtung Metaprogrammierung. Aber das hat dich momentan noch nicht zu kümmern... 🙂



  • Danke Dir, werd mich mal dran setzen...


Anmelden zum Antworten