La technique est la suivante.
Tu as une classe Array qui a:
- Un entier représentant la taille (celle vu de l'extérieur).
- un char* ou int* ou T* dépendant du type de tableau que tu veux faire (ou alors c'est un template au type choisissable).
- un entier représentant la taille interne.
Lorsque tu crées ta classe array, le tableau est vide. Quand quelqu'un ajoute un élément au tableau:
- Tu check que taille + nb élement >= taille interne. Si c'est le cas
...* Tu augmentes la taille de taille + nb éléments
...* Tu augmentes la taille interne de n éléments (on va dire +32).
...* Tu fais un réalloc de ton tableau pour augmenter sa taille de 32.
...* Tu copies les éléments à l'intérieur du tableau.
Operateur:
- operator=, pas dur, tu te contentes de copier un à un les élements. Attention, ne fait pas que pointer, mais fais une vraie copie du tableau interne (avec memcpy).
- operator+, dans ta méthode tu créés une nouvelle classe Array intialisée avec tes éléments plus ceux reçus par l'autre Array, et tu retourne cet objet.
Conversion:
- Pour convertir en tableau, tu copies ton tableau interne en ajustant la taille à "Taille" et non "Taille interne". Et tu retournes cette copie.
- Pour convertir un tableau en Array, tu prends les élements et la taille du tableau. Tu supprimes l'ancien tableau interne, si tu en as un. Tu alloues un tableau interne de taille tableau + 32. Tu copies les élements dedans. Tu mets à jour taille et taille interne.
Suppression:
- C'est un tableau. C'est donc pas efficace pour la suppression. Pas le choix, c'est couteux. Petite astuce: Pas besoin de free ou de realloc quoi que ce soit. Tu fais juste un décalage des éléments de la droite vers la gauche. Tu diminus ensuite juste la taille réel, sans toucher à la taille interne. Le plus beau, c'est que si c'est le dernier élément du tableau, au final tu ne fais que décrémenter une variable :)
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question