vektor klasse



  • hy there

    nun gut mein titel mag etwas irreführend sein 😉 da ich in C programmiere und "nix c++" klassen habe 😉

    das problem ist ich kann mich nicht entscheiden 😉 also ich habe eine funktion die nennt sich v_malloc()/ v_free() v steht für vector 😉 die eine erstellt speicher und legt noch zusätzlich einen eintrag in einer liste an, die andere löscht den speicher und den eintrag aus der liste...sonst verlier ich noch den überblick bei vielen vektoren 😉

    naja auf jedenfall zum eigentlichen problem wie gestalte ich die rechenfunktionen am besten?

    zb. void vv_add(vtyp *v1,vtyp *v2)

    hier würde ich v1, zu v2 hinzuaddieren und das ergebnis aber wieder in v1 ablegen...

    dann hätt ich da noch void vv_add(vtyp *v1,vtyp *v2, vtyp *out)
    klar nich? da würde ich das ergebnis in out ablegen..das "problem" hier ich

    müsste ausserhalb einen neuen vektor anlegen (statisch oder mit malloc)

    oder aber ich arbeite mit einem return wert und lass mir einen vtyp * zurückgeben indem ich dann in der funktion v_malloc aufgerufen habe...das würde mir ja gleich nen neuen ergebnisvektor erstellen...hierbei bleiben die anderen beiden unberührt

    genauso wäre es bei vektor skalar operationen geb ich nun einen zurück oder schreib ich den den selben...aber ich glaub hier schreib ich in den selben da ich ja direkt auf ihm arbeite...wäre ja etwas sinnlos wenn ich 2*v1 rechne und das ergebnis in v2 ablege...

    naja das mag für eucht vielleicht alles komisch und trivial sein...aber ich suche einfach nach einem guten weg diese funktionen zu realisieren...und ob ich nun nen neuen ergebnisvektor anlege oder auf einem der beiden "richtig" operiere...das is schon hmm...naja schwer zu entscheiden 😉

    tschöö

    tt



  • Sind das Memberfunktionen der Vektor Klasse (scheinbar nicht, warum?)? Warum ist da immer so ein doofes v_ davor? Wenn du einen neuen Vektor zurückgibst, dann sollte es so aussehen vtyp bla( vtyp& v1,vtyp& v2 ).



  • überflieg den text doch nich nur 😉 das is in C und das andere waren 3 möglichkeiten für ein und das selbe...aber hab jetzt für mich eine "befriedigende" lösung gefunden....ach ja und diese vv_ das heisst vector vector und dahinter kommt dann was damit gemacht wird zb. add, div usw. ich hab dann noch vs für vector scalar operationen oder mv für matrix vektor multiplikation usw...irgendwie muss man es ja für sich plausibel machen wenn man schon keine operatoren zum überladen hat 🙂

    tschööö

    tt



  • Wenn Du es so machst, wie Du es bisher gezeigt hast, musst Du in einigen Situationen sehr vorsichtig sein: nämlich wenn zwei der übergebenen Zeiger identisch sind. Bei manchen(!) Operationen müsstest Du dann einen neuen temporären Vektor erzeugen. Ich würde die Variante bevorzugen, wo ein Vektor das Ergebnis der Funktion ist, also nicht "void". Du kannst damit auch leichter mehrere Operationen verknüpfen.
    Eine Liste aller verwendeten Vektoren anlegen - Warum tust Du das?



  • die liste erstelle ich wenn ich mit sehr vielen vektoren arbeite die ich dynamisch anlege 🙂 so brauch ich nur die liste am ende durchzugehen und dort wo die pointer hinführen zu free()'en in ner schleife...nich per hand...

    tschööö

    tt


Anmelden zum Antworten