Next Previous Contents

4. Arrays

Gli array sono probabilmente i container piu' utlizzati. Sono array contati di oggetti. Ovvero non hanno una dimensione predefinita, ma gli oggetti vengono aggiunti all'array che ne mantiene un conteggio. Ne esistono quattro varianti:

1) TArray<T>         array di oggetti di tipo T
2) TIArray<T>        array di puntatori a oggetti di tipo T
3) TSArray<T>        array ordinato di oggetti di tipo T
4) TISArray<T>       array ordinato di puntatori a oggetti di tipo T

Le quattro versioni hanno un uso molto simile.

add()                   aggiunge un oggetto all'array
GetItemsInContainer()   ritorna il numero di oggetti nell'array
IsEmpty()               ritorna vero se l'array e' vuoto
Flush()                 svuota l'array
Copy()                  copia il contenuto di un'altro array simile
operator[]              estrae un oggetto dall'array
...
vedi la documentazione delle API per un elenco dettagliato

4.1 Direct arrays of objects.

...
// it work fine: the base types have all operator= and operator==
// the array will be created with initial size of 100 doubles, the base index is 0,
// the step increment when add more than 100 elements will be 10
TArray<double> arDbl(100, 0, 10);
arDbl.add(123.45);
...
...
class myClass
{
public:
        int var1, var2, var3;
        myClass& operator=(const myClass& c) {
                var1 = c.var1;
                var2 = c.var2;
                var3 = c.var3;
                return *this;
        }

        int operator==(const myClass& c) const { return  == this; }
};
...
...
TArray<myClass> arMC(10, 0, 10);

myClass c1;
c1.var1 = 10;
c1.var2 = 20;
c1.var3 = 30;
...
// insert the instance (not the address) in the array.
// the entry in array will be copied from c1 with the operator=
arMC.add(c1);
...
...
for(int i=0 ; i<arMC.GetItemsInContainer() ; i++)
{
        // note the usage of operator[] on the array
        printf("%d %d %d\n", arMC[i].var1, arMC[i].var2, arMC[i].var3);
}
...
...
TArrayIterator<myClass> itrMC(arMC);
while(itrMC)
{
        const myClass& c = itrMC.Current();
        printf("%d %d %d\n", c.var1, c.var2, c.var3);
        itrMC++;
}
...
...

4.2 Indirect arrays of objects.

...
...
class myClass
{
public:
        int var1, var2, var3;

        int operator==(const myClass& c) const { return  == this; }
};
...
...
TIArray<myClass> arMC(10, 0, 10);

myClass *c1 = new myClass;
c1->var1 = 10;
c1->var2 = 20;
c1->var3 = 30;
...
// insert the pointer in the array.
// DON'T CALL delete ON THE c1 POINTER
arMC.add(c1);
...
...
for(int i=0 ; i<arMC.GetItemsInContainer() ; i++)
{
        // note the usage of operator[] on the array
        printf("%d %d %d\n", arMC[i]->var1, arMC[i]->var2, arMC[i]->var3);
}
...
...
TIArrayIterator<myClass> itrMC(arMC);
while(itrMC)
{
        const myClass* c = itrMC.Current();
        printf("%d %d %d\n", c->var1, c->var2, c->var3);
        itrMC++;
}
...
...


Next Previous Contents