vector<complex <double> > umwandeln in double*



  • @pumuckl

    Ich glaube ich habe deinen code verstanden bis auf folgendes:

    {
      *dptr++ = it->real();
      *dptr++ = it->imag();
    }
    

    warum das ++ bei *dptr++ ??

    Ach ja muss jetzt in ein Seminar. bin in spätestens 1.5 Stunden wieder da.



  • Tachyon schrieb:

    Simon2 schrieb:

    [...]

    Ne, das ist schon ein technisches Problem. Es soll ein Vektor aus std::complex<T> ist ein Array der Form [Re Im Re Im ...] umgewandelt werden....

    Das vermutest Du. Aber meine Frage bleibt, ob es das ist, was gewollt ist.
    ... und inzwischen hat duwan das schon beantwortet:

    duwan schrieb:

    ...Also bei meinem Problem ist die Anordnung der Real und Imaginärteile total egal, da die Routine der NAG-Bibliothek sowieso nur mit real-Teilen arbeitet, ...

    Ergo: Doch nicht "egal", weil nur die Realteile interessieren (die man nur rausbekommt, wenn man weiß, wo sie "liegen" (= ihre Anordnung kennt) :p ;).

    Und es bleibt in erster Linie eine fachliche Aufgabe, aus einer komplexen Zahl den Realteil zu extrahieren. Es ist halt nich einfach ein "cast", bei dem eine technische Repräsentation in eine andere deselben Wertes umgewandelt wird, sondern es ist eine echte Abbildung, die den Wert verändert (jedenfall im Allgemeinen).

    Gruß,

    Simon2.



  • duwan schrieb:

    @pumuckl

    Ich glaube ich habe deinen code verstanden bis auf folgendes:

    {
      *dptr++ = it->real();
      *dptr++ = it->imag();
    }
    

    warum das ++ bei *dptr++ ??

    Der operator++ ist der sogenannte Inkrement-Operator. Je nachdem ob er vor oder hinter dem Objekt steht auf das er angewandt wird, wird der Wert vor der Erhöhung (postinkrement, das ++ steht dahinter) oder nach der erhöhung (präinkrement, das ++ steht davor) zurückgegeben.
    dptr++ heißt also "erhöhe den Pointer dptr um eins und gib den alten (Adress-)Wert zurück". Die erste der beiden Zeilen heißt also insgesamt "schreibe den realwert an die Stelle, auf die dptr zeigt und erhöhe diesen".
    Das ist im Grunde nichts anderes als bei Iteratoren (wie oben geschrieben, SIND Pointer die Iteratoren eines Arrays): wenn ich den operator ++ mehrfach auf einen Pointer anwende, gehe ich Schritt für Schritt durch das Array, in das der pointer zeigt (oder durch irgendwelchen kruden Speicher, wenn der Pointer nicht in ein Array zeigt - das wird dann irgendwann vermutlich mit Zugriffsfehlern quittiert...)



  • Alles klar. Wuste schon was ein Increment ist, nur nicht das man es auch auf Pointer anwenden kann

    Also denke ich werde das ganze noch mal überdenken wie ich das jetzt mache. Vielen Dank für eure Hilfe.

    Lg Duwan


Anmelden zum Antworten