Page d'accueil Description du projet
/******************************************
 *
 *   Cedric Pradalier   2001
 *   mail : http://cedric.pradalier.free.fr/mail.html
 *
 *****************************************/



#ifndef VECTOR_H
#define VECTOR_H
#include "objet.h"

/******************************************

  tableau generique destine a recevoir des CObjet *
  Sa taille est ajustee en utilisant le principe
  de "Expanding Table" :
  Si NbElem==Size : Size *= 2
  Si NbElem==Size/4 : Size /= 2

  La taille initiale est 2

  La suppression ne maintient pas l'ordre d'insertion :
  la suppression de l'element i echange les elements i et NbElem-1
  et diminue le NbElem de 1.
Ex : 
  T : [........i........n-1]
  suppr(i) : 
  Echange   T : [........n-1........i]
  Reduction     T : [........n-1........]
  
******************************************/


class CVector : CObjet
{
public:
    CVector () {NbElem = 0 ; Size = 2 ; tElems = new (CObjet *)[2];}
    virtual ~CVector () {delete [] tElems;}

/* supprime l'element i */
    void suppr(int i);
/* ajoute elem en fin de tableau */
    void add(CObjet * elem);
/* Reduit le tableau a sa taille minimale */
    void TrimToSize();
/* Recupere l'element i */
    CObjet * operator[](int i);
/* idem, plus facile a appele pour un Vector* */
    CObjet * ElemAt(int i);
/* Renvoie le Nb d'element */
    int GetNbElem() {return NbElem;}
    
/* Affiche le tableau */
    virtual void Print();


/* Trie le tableau en utilisant la propriete IsBetter */
    void Sort();
        


protected:
    int NbElem,Size; 
    CObjet ** tElems;
};


#endif // VECTOR_H