C++: Collections simples

 

1 La classe Tableau

Un tableau est une collection pour laquelle, le nombre d'éléments est connu à la création. La taille d'un tableau est fixe.

Les éléments contenus sont indexés : on accède aux éléments d'un tableau par un index entier.

1.1 Mise en oeuvre

Mettre en oeuvre la classe Tableau pour laquelle les éléments stockés sont des void *. Voici la définition de cette classe : 


#ifndef __TABLEAU_H__
#define __TABLEAU_H__

#include <stddef.h>

class Tableau {
  friend ostream & operator << (ostream &, const Tableau &);

public:
  Tableau(size_t _nb = 128);
  ~Tableau();

  size_t size() const; // le nombre d'elements
  const void * const * elements() const; // le tableau d'elements

  // positionne un element dans le tableau
  void atPut(size_t _pos, void * _ptr);
  
  // retourne l'element d'indexe _pos
  void *& at(size_t _pos); 

  // retourne l'element d'indexe _pos
  void * at(size_t _pos) const; 

  // retourne l'indexe d'un élément
  size_t indexOf(const void * _ptr) const; 

  // retourne l'indexe du premier élément pour lequel _fcmp() retourne true
  size_t indexOf(bool (*_fcmp)(const void * _ptr, void *), void * _data) const; 

  // recherche les indexes de _ptr, les place dans le tableau _indexes et retourne
  // le nombre d'indexes trouves
  size_t indexesOf(const void * _ptr, size_t * _indexes) const;

  // recherche les indexes des elements pour lesquel _fcmp retourne true, 
  // les place dans le tableau _indexes et retourne le nombre d'indexes trouves
  size_t indexesOf(bool (*_fcmp)(const void * _ptr, void *), void * _data, size_t * _indexes) const;

private:
  void ** arr_;
  size_t nb_;
};

#endif // __TABLEAU_H__

2 La classe Collection

Il s'agit d'améliorer la classe Tableau de façon à ce qu'on puisse ajouter autant d'éléments que l'on veut. Le nombre d'éléments est donc variable. A sa création, un objet de la classeCollection ne contient aucun éléments. On peut, en plus des fonctions disponibles pour la classe Tableau, ajouter, insérer à une certaine position ou retirer un élément de type void*.

Donnez une mise en oeuvre complète de cette classe.