vector<double> and double* übergeben
-
Hi main Problm in Kurzform:
Ganz alte Funktion
void tue_etwas (double*, int); // original 1991 'C' codeNeue 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()); }