2016-05-16 28 views
0

Ich habe eindimensionales Array
Treat eindimensionales Array als zweidimensionale

int* a = new int[n * m]; 

und ich brauche es als zweidimensionale zu behandeln, dh

a[i][j] = a[n * i + j] 

ich versucht habe, die herum spielen Richtlinien verwenden und viel gegoogelt. Aber nichts hat für mich funktioniert.
Gibt es eine Möglichkeit, dies zu tun? Smt. wie define a[i][j] a[n * i + j]?
Danke.

+0

Ich denke, Sie haben nicht viel suchen http://stackoverflow.com/questions/7492842/convert-one-dimensional-arrarre-to-two-dimensional-in-c –

+0

Any 'Array_view', oder die GSL-' span 'class, sollte in der Lage sein, dies zu tun, ohne etwas an dem Array selbst zu ändern. – chris

+0

Ich nehme an, Sie haben nur eine Zuordnung, weil Sie möchten, dass die Daten zusammenhängend sind? –

Antwort

1

Da Sie in C sind die Programmierung ++ Sie eine Wrapper-Klasse erstellen können, die die Anordnung hält, und haben eine operator[] Funktion, die einen Proxy-Objekt, dessen operator[] Funktion liefert führt die n * i + j Berechnung und gibt einen Verweis auf das gewünschte Element.

Alternativ können Sie eine Inline-Funktion oder ein funktionsähnliches Makro erstellen, das das Array und die Indizes als Argumente akzeptiert und das Element zurückgibt.

Aber ohne Hacks wie die in Sams answer Wrapper-Klassen, gibt es keine Möglichkeit, eine "wahre" Array von Arrays, wie Sie wollen.

2

Sie müssen ein zweites Array definieren, das Zeiger enthält. Etwas wie folgt aus:

int **b=new int *[m]; 

for (int i=0; i<m; ++i) 
    b[i]=&a[i*n]; 

Danach wird b[i][j] wird a[n*i+j] beziehen.

+0

Während dies eine mögliche Lösung ist, hat es einige Probleme, die ein einzelnes "Array" nicht hat, hauptsächlich über Lokalität und CPU-Caching. –

+0

Ich möchte Array von Zeigern nicht zuordnen und dann jeder Speicher für jeden der Zeiger zuweisen. Ich will nur Substitution 'a [i] [j] = a [n * i + j]' –

+0

@T_Igor Beachten Sie, dass der Code in der Antwort nicht tatsächlich tun, was Sie denken, dass es tut. Die Schleife weist keinen Speicher zu, nur Zuweisung. –