Hallo Leute! Hätte da eine Frage an euch. Also, wie man ein normales array mit variabler Größe definiert weiß ich: z.B: float array = new float [variable]; Jetzt würde ich allerdings ein 2d-array mit variabler Zeilenanzahl benötigen. Kann mir da jemand weiterhelfen? mfg.
Reinhard Leitgeb schrieb: > float array = new float [variable]; das ist kein C, das ist c++. Da würde ich an deiner Stellen STL-Container benutzen. std::vector< std::vector< float > > array;
Und wenns am Ende doch C sein soll kannst du auch mit malloc, realloc, calloc arbeiten.
Oder du nimmst mein VarArr.h (in http://mfgkw.dyndns.org/vararr_release.zip zu finden). Darin ist eine template-Klasse VarArr<>, mit der man ein Feld eines beliebigen Typs anlegen kann und dann mit der Schreibweise meinfeld[index] darauf zugreifen kann Damit hast du so etwas ähnliches wie einen std::vector, allerdings mit folgenden grundlegenden Unterschieden: - man muß sich nicht darum kümmern, daß ein Element auch existiert. Das wird automatisch beschafft, sobald es zum ersten Mal verwendet wird. - Die Feldindices müssen nicht bei 0 beginnen. Es ist genauso möglich, meinfeld[100] bis meinfeld[120] zu nehmen oder sogar negative Indices, z.B. meinfeld[-10]. Weil du hier ein zweidimensionales Feld brauchst, kann man VarArr< VarArr< float > > nehmen (oder gleich double, wie man will). Die inneren Teilfelder können gleich lang sein, müssen aber nicht unbedingt.
1 | #include "VarArr.h" |
2 | |
3 | int main( int nargs, char **args ) |
4 | {
|
5 | AnyWare::VarArr< AnyWare::VarArr< double > > meinArray; |
6 | |
7 | // ein paar Werte belegen:
|
8 | meinArray[-1][0] = -1.0; |
9 | meinArray[-1][1] = -1.1; |
10 | meinArray[-1][2] = -1.2; |
11 | meinArray[0][0] = 0.0; |
12 | meinArray[0][1] = 0.1; |
13 | meinArray[0][2] = 0.2; |
14 | meinArray[0][3] = 0.3; |
15 | meinArray[1][0] = 1.0; |
16 | meinArray[1][1] = 1.1; |
17 | meinArray[1][2] = 1.2; |
18 | meinArray[1][3] = 1.3; |
19 | meinArray[1][4] = 1.4; |
20 | meinArray[1][5] = 1.5; |
21 | |
22 | // alle ausgeben:
|
23 | for( int i=meinArray.ug(); i<=meinArray.og(); ++i ) |
24 | {
|
25 | for( int j=meinArray[i].ug(); j<=meinArray[i].og(); ++j ) |
26 | {
|
27 | std::cout << "meinArray[" << i << "][" << j << "] = " << meinArray[i][j] |
28 | << std::endl; |
29 | }
|
30 | }
|
31 | |
32 | return 0; |
33 | }
|
Das sieht dann so aus:
1 | klaus@vdr2:~/tmp > g++ -Wall t.cpp -o t && ./t |
2 | meinArray[-1][0] = -1 |
3 | meinArray[-1][1] = -1.1 |
4 | meinArray[-1][2] = -1.2 |
5 | meinArray[0][0] = 0 |
6 | meinArray[0][1] = 0.1 |
7 | meinArray[0][2] = 0.2 |
8 | meinArray[0][3] = 0.3 |
9 | meinArray[1][0] = 1 |
10 | meinArray[1][1] = 1.1 |
11 | meinArray[1][2] = 1.2 |
12 | meinArray[1][3] = 1.3 |
13 | meinArray[1][4] = 1.4 |
14 | meinArray[1][5] = 1.5 |
Wenn ich mal ganz viel Zeit habe, mache ich noch Iteratoren dazu...
Vlad Tepesch schrieb: >> float array = new float [variable]; > > das ist kein C, das ist c++. Vor allem ist es ein Fehler, den der Compiler anmeckern wird.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.