mehrdimensionale arrays als funktionsergebnis
-
Hallo!
Ich muss jede Menge 2-dimensionale Feld zusammen stellen, die gleichartig strukturiert sind, sich somit gut in eine funktion auslagern lassen.
In einem Untergramm verwende ich einen vektor:
double vek[3][3]dieser soll in abhängigkeit von 2 parametern (int) mittels einem anderen unterprogramm belegt werden
vek=create_vek(i,k)wie muss mein unterprogramm aussehen? wie rufe ich es auf? ich kenne die problematik mit zeigern und arrays...
ich stelle es mir etwa so vor...
double createvek[3][3](int i, int k)Aber wie gesagt... als rückgabewert dieser funktion sollte ja wieder eine [3][3]Matrix stehen...
schon mal Danke im vorraus
Micha
-
Wo genau hast du denn ein Problem?
Hier mal was zum rumspielen. Vielleicht wird es so etwas klarer..

#include <iostream> int* make_vec ( int x, int y) { int nr = 0; int* v = new int[x*y]; for (int i (0); i < x; i++) for (int j (0); j < y; j++) v[i*y+j] = nr++; return v; } void all_out (int* a, int x, int y) { for (int i (0); i < x; i++) for (int j (0); j < y; j++) std::cout << a[i*y+j] << std::endl; } void out (int* a, int y, int posx, int posy) { std::cout << a[posx*y+posy] << std::endl; } int main(void) { int* k = make_vec (3, 3); all_out (k, 3, 3); std::cout << "Nr. 0:1: "; out (k, 3, 0, 1); delete[] k; return 0; }
-
Michaaaaaaaa schrieb:
ich stelle es mir etwa so vor...
double createvek[3][3](int i, int k)Wenn überhaupt, so müsste es wohl
double createvek(int i, int k)[3][3]heißen. Allerdings darf der Rückgabetyp einer Funktion kein Array sein, dass ist also illegal.
Hier bietet sich tr1::array bzw. boost::array.
typedef std::tr1::array<std::tr1:array<double,3>,3> vek;==>
vek createvek(int i, int k);Da die Dimensionen bekannt sind, gibt es keine guten Grund, kreativ mit Zeigern umzugehen: das dürfte auch ineffizient sein.
-
danke!
ich werde mal ein wenig dran rumbasteln
Michael
-
Da die Dimensionen bekannt sind, gibt es keine guten Grund, kreativ mit Zeigern umzugehen: das dürfte auch ineffizient sein.
Ja. Das stimmt schon. Aber ist sicher auch noch empfehlenswert, wenn man die sonstige Arbeitsweise ein bisschen kennenlernt. Mit sehr grosser Wahrscheinlichkeit wird er das auch mal machen müssen, ohne zu wissen, wie gross das Array ist.