begin process at 2012 05 29 05:35:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Extension de la classe array


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Extension de la classe array

lundi 11 avril 2011 à 18:30:59 | Extension de la classe array

sebisp

Bon, ca y est je vais payer cher d'avoir préférer suivre les cours de math plutot que ceux d'info... Je dois construire une classe darray répondant à une dizaine de critères :

1.Pas de dimensionnement explicite
2. opérateur d'accès [] qui permet la consultation ou la modification et qui procede de lui meme à l'extension du tableau si besoin.
3. On aura une methode pour recuperer le nbre d'éléments du tableau
4.ils possèdent des opérateurs d'entrée sortie agissant sur tout le tableau
5. ils sont affectables entre eux
6. ils sont convertibles en tableaux ordinaires et peuvent etre construits à partir de tableaux ordinaires
7. Ils possedent des operateurs de concatenation
8. ils permettent la suppression d'éléments
9. Ils garantissent que leurs éléments sont implantés à une adresse immuable meme en cas de réallocation
10. ils tentent de minimiser la fréquence des réallocations.

Il y a plusieurs points qui me posent problème :
.Comment vais je définir les constructeurs en prenant en compte le 9? et quels vont etre les données nécessaires(informelles) à déclarer pour la classe?
.Je ne comprends pas l'histoire d'opérateur d'entrée sortie.

Merci beaucoup d'avance de me filer un petit coup de pouce^^ Je me sens un peu largué.
lundi 11 avril 2011 à 19:09:33 | Re : Extension de la classe array

CptPingu

Administrateur CodeS-SourceS
1,2,3,4,5,6: facile.
7: chiant, mais pas dur.
8: ok, là c'est chiant
10: Tu fais un tableau comme en C, d'une taille prédéfinis, que tu ajustes petit à petit.
Ex: Tu fais un tableau de taille 32. Si tu dépasse 32, tu réalloues la taille du tableau à 64, etc...
Le but c'est de ne pas agrandir la taille du tableau à la bonne taille, mais se laisser de la marge à chaque fois.
N'hésite pas à regarder les sources de std::string, c'est très intéressant.

Pour le 9), si tu es libre de l'implémentation de ton array, fais une liste chainée. Sinon, je ne vois pas. Dès que tu réalloueras, tu auras potentiellement une adresse différente.

Je ne comprends pas l'histoire d'opérateur d'entrée sortie.


Je suppose que c'est "l'opérateur >>" et "l'opérateur <<".

________________________________________________________________________
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
lundi 18 avril 2011 à 16:23:12 | Re : Extension de la classe array

sebisp

Je deviens dingue^^

Est-il possible de récupérer quelque part le code de la classe array et s'en inspirer? Je me pose d'ailleurs al question pour l'ensemble des classes prédéfinies, elles doivent bien etre stockées quelque part?
lundi 18 avril 2011 à 16:29:15 | Re : Extension de la classe array

CptPingu

Administrateur CodeS-SourceS
Oui elles sont stockées dans "/usr/include/c++/version" sous Linux, chez moi ça donne "/usr/include/c++/4.4".
Sous Windows, les fichiers doivent être livrés avec ton compilateur.

Soit dit en passant, j'ai l'impression que l'on te demande de recoder le std::vector (fichier vector dans les sources :p).

________________________________________________________________________
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
mercredi 20 avril 2011 à 16:01:52 | Re : Extension de la classe array

sebisp

Bon j'ai beau chercher je trouve rien dans les sources de Codeblock sous windows... Je savais que j'aurai du mettre un chapeau rouge mais que voulez vous la pression tout ca tout ca.

donc je galere toujours pour ma classe array.

Donc plutot que de me fournir le code pourriez vous me donner le principe d'un array?

Par exemple je me demandais si c'est une liste chainée? du type (valeur, adresse vers la case suivante)?
mercredi 20 avril 2011 à 16:08:35 | Re : Extension de la classe array

CptPingu

Administrateur CodeS-SourceS
2 versions à te proposer:

1) Une vraie classe Array (avec un implémentation en tableau). Mais qui ne garantie pas le point 9).
2) Une classe Array utilisant une liste chainées (garantie le 9), mais mauvaise performance en accès direct).

Fais-ton choix :)

________________________________________________________________________
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
mercredi 20 avril 2011 à 16:12:20 | Re : Extension de la classe array

sebisp

Le 1 très clairement je m'occuperai des adresses immuables lorsque j'aurai compris ton code.
mercredi 20 avril 2011 à 16:18:04 | Re : Extension de la classe array

sebisp

Je n'aime pas les listes chainées, je trouve que l'indicage du tableau perd de son utilité si on doit parcourir tout le tableau^^ Mais si ce n'est pas une liste chainée, j'ai du mal à voir comment réussir à créer quelque chose de valable. Je suis donc impatient de voir ce que tu vas me proposer^^
mercredi 20 avril 2011 à 16:28:58 | Re : Extension de la classe array

CptPingu

Administrateur CodeS-SourceS
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
mercredi 20 avril 2011 à 18:02:15 | Re : Extension de la classe array

sebisp

Okay voici donc un début grâce à tes indications :
Code C/C++ :
//mon Darray.h
#include <iostream>
#include <string>
using namespace std;

class Darray
{
    public:

    void ajouter(int valeur); //permet d'ajouter une case
    void operator=(Darray tab2); //on met tab2 dans tab1
    void operator+(Darray tab1); //on concatène tab1 et tab2
    int operator[]();
    bool estVide(); // vérifie que tab1 n'est pas vide


    private:

    int taille; //taille du tableau = nombre de case
    int tailleInterne;
    int* tab;

};


et le darray.cpp :

Code C/C++ :
#include "Darray.h"

#include <iostream>
#include <string>
using namespace std;


Darray::Darray(int tailleTab1, int tailleIntTab1, int* tab1) //constructeur
{
    this->taille = tailleTab1;

    this->tailleInterne = tailleIntTab1;

    this->tab = tab1;
}

void Darray::ajouter(int valeur)
{

}

void Darray::operator=(Darray tab2)
{
 if(this.taille()=tab2.taille())
 {
     for(int i=0, i<this.taille(),++i)
     {

     }
 }
}

void Darray::operator+(Darray tab2)
{

}

int Darray::operator[]()
{

}

bool Darray::estVide()
{
    if (taille=0)
    {
        return true;
    }
    else
    {
        return false;
    }
}




Et naturellement plus je codais plus je me posais des questions...
(1)Pour définir mon opérateur d'accès [] j'ai besoin d'accéder à un élément de tab (cf le header) mais je ne trouve pas comment on fait cela X( "j'ai un peu honte"^^
(2)dans mes méthodes je dois souvent utiliser les caractéristiques taille et tailleInterne mais ce sont des données en privée comment pallier à ce problème?
(3)Merci beaucoup beaucoup tu n'imagines pas comme ca fait du bien d'avoir quelqu'un qui m'a aider à avancer^^ ok j'ai mis 3h pour pondre des lignes pleines de fautes mais j'avance^^

1 2

Cette discussion est classée dans : tableau, classe, extension, array, éléments


Répondre à ce message

Sujets en rapport avec ce message

Impossible de lire le contenu d'un tableau ! [ par Galmiza ] Salut,J'utilise Visual C++ 6.0J'ai créé une classe (Physic), et dans le meme fichier header (physic.h), 2 structures (Bielle et Point).Des membres pu [c++builder6] Aide sur création d'une classe (svp)? [ par belkin ] Bonjour, J'aimerais utiliser une classe où je vais avoir des fonctions à l'intérieur. Mais je n'arrive pas à trouver la solution à mon problème. En fa pb classes avec tableau [ par JediMaster ] je voudrais crée une classe comme celle ci avec un tableau qui aurit sa taille qui varirais selon l'objet j' ai donc fait un construteurclass classe{ un tableau dans une classe [ par JediMaster ] salut tt le monde j'avais deja poser cet question mais je crois que celui qui ma repondu a pas compris la question donc je veux faire une classe avec Donner des valeurs au éléments d'un tableaux dans le constructeur d'une classe [ par ProGamer ] Dans la définition de ma classe, j'ai un tableau d'entiers. Dans le constructeur de la classe, j'ai besoin de donner des valeurs aux éléments du table Constructeur sur un tableau de classes [ par Supo ] Lorsque je crée un tableau de classe, disons avecnomdelaclasse instance[10];et que j'ai un constructeur pour cette classe, comment je fait pour donner tableau dynamique d'objets [ par jonathan100 ] Bonjour a tous! Voici mon probleme. J'ai une classe Voiture dans Voiture.h. Dans le programme principal, je souhaite créer un tableau qui contiendra d tableau d'une classe... [ par jonathan100 ] Bonjour a tous, Voici mon problème. J'ai une classe Voiture, et une classe table qui contient un tableau de Voiture. Voici le code de la classe table, appeler un tableau... [ par ilimo ] bonjour,voici mon probleme :1- j'ai 3 classes : a, b, c2- classe "a" contient un tableau de pointeur sur pointeur de classe "b" : b **tab;3- j'initial attribut static [ par MLine ] Slut,j'ai encore des ennuis avec un attribut de classe déclaré en protected dans ma classe Organism :static Array2D vectorg(nx, ny); /*nx et ny entier


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales