C-prog: 2d array mit variabler zeilenanzahl

#2311415
Lesenswert?

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.
#2312773
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren