Bonjour,
j'ai des algorithmes à développer (plusieurs). Qui travaillent sur les mêmes données.
Ces données sont représentées par des structures, stockées dans des tableaux. Certaines structures ont des références vers d'autres.

Ma question est, vaut-il mieux faire ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
struct machin {
  struct bouh *bouh;
};
 
struct bouh {
  attribut_essentiel;
};
ou :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
struct machin {
 int bouh; /* bouh est l'indice dans un tableau qui contient l'ensemble des "bouh" */
};
 
struct bouh {
  attribut_essentiel;
};
Il existe un tableau qui contient des "machin", et un tableau qui contient des "bouh".

La première méthode me paraît plus "standard".
Mais avec la seconde, l'avantage c'est qu'on peut rajouter d'autres structures (comme des tas) spécifiques pour certains algorithmes, dans des tableaux, et pas directement dans la structure "bouh".
Je m'explique, avec la première méthode, je vais devoir faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
struct bouh {
  attribut_essentiel;
  attribut_supplémentaire;
};
 
/* .... */
 
for (int i = 0; i < nb_machins; i++) {
  machin m = machins[i]
  utilisation de m->bouh->attribut_supplementaire;
}
Avec l'autre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
/* struct bouh n'a pas changée */
struct bouh {
  attribut_essentiel;
};
 
/* .... */
attribut_supplementaire[nb_bouhs]; /* les attributs supplémentaires sont maintenant locaux */
/* initialisation */
 
for (int i = 0; i < nb_machins; i++) {
  machine m = machins[i];
  utilisation de attribut_supplementaires[m->bouh];
}
Merci.