vector<double> and double* übergeben



  • Hi main Problm in Kurzform:

    Ganz alte Funktion
    void tue_etwas (double*, int); // original 1991 'C' code

    Neue Funktionen benutzen Vectoren, habe aber keine Lust das alte alles zu erneuern. Deshalb früher "Wrapper" gebaut:

    void tue_etwas_neu (vector<double> input) {
    tue_etwas (input.begin(), input.size());
    }

    Früher war dabei zu gcc 2.95-Zeiten, der hat es ja mit dem Standard nicht so genau genommen. Heute zu gcc 3.2-Zeiten geht ds nicht mehr:

    error: cannot convert \_\_gnu\_cxx::\_\_normal\_iterator<double*, std::vector<double, std::allocator<double> > >' to \double*' for argument `1
    ' to `void tue_etwas(double*, int)'

    Aha. Wie würde es denn Standrd-konform gehen?

    Vielen Dank für Hilfe. 🙂



  • tue_etwas (&input[0], input.size());
    

    Beim vector<T> ist garantiert, dass die Elemente hintereinander im Speicher liegen und damit &v[0] äquivalent zu einem C-Array ist.



  • Beim vector<T> ist garantiert, dass die Elemente hintereinander im Speicher liegen und damit &v[0] äquivalent zu einem C-Array ist.

    Ohne pedantisch sein zu wollen: Ausser es ist ein std::vector<bool> 😉



  • Danke, so klappt es 👍



  • void tue_etwas_neu (vector<double> input) {  // sicher, dass du den gesammten Vektor kopieren willst?
    tue_etwas (input.begin(), input.size()); 
    }
    

Anmelden zum Antworten