Felder beliebigen Typs mit variablen Grenzen

Gefordert ist eine template-Klasse, beispielsweise mit dem Namen VarArr. Diese Klasse soll die automatische Verwaltung von dynamischen Feldern realisieren.

Die Feldgrenzen sollen zur Laufzeit durch Ansprechen von Elementen des Feldes automatisch erweitert werden.

Beispielverwendung:

#include <VarArr.h>
...

VarArr<int>  intArr;

intArr[3] = 33;         // Feld hat jetzt nur ein Element [3]
intArr[2] = 22;         // Feld hat jetzt zwei Elemente ([2], [3])
intArr[-1] = 111;       // Feld hat jetzt 5 Elemente ([-1] bis [3])
intArr[0] = 0;
intArr[1] = 11;
for( int i=-1; i<=3 )
{
   cout << "Element " << i << " ist " << intArr[i] << endl;
}

Mit VarArr<int> intArr; wird ein Feld von int-Werten mit dem Namen intArr vereinbart, ohne die gewünschten Feldgrenzen angeben zu müssen.

Dann kann beliebig auf Elemente des Feldes zugegriffen werden; dabei soll im Hintergrund dafür gesorgt werden, daß die angesprochenen Feldelemente auch existieren.

Des Pudels Kern ist natürlich die geschickte Definition von operator[]. Diese Funktion wird bei jedem Feldzugriff (mit den Zeichen []) aufgerufen, und kann bei Bedarf in Ruhe Speicher nachallokieren,umkopieren, oder was sonst nötig ist, bevor sie eine Referenz auf das gewünschte Element liefert.

Zu beachtende Randbedingungen:

  1. Die Klasse VarArr soll sowohl für eingebaute Datentypen (int, double etc.) als auch für eigene Datentypen (class ...) sinnvoll zu verwenden sein.

  2. Um Sortier- und Suchfunktionen wie qsort() oder bsearch() verwenden zu können, wäre es sinnvoll wenn die Elemente tatsächlich in der Reihenfolge ihrer Indices im Speicher stehen (nicht zwingend).

  3. Neben den Mindestanforderungen kann man noch sinnvolle Memberfunktionen definieren, um beispielsweise die aktuellen Feldgrenzen zu setzen oder abzufragen.

    Beispiele:

Themen:

Lösung siehe Felder beliebigen Typs mit variablen Grenzen.

AnyWare@Wachtler.de