Passage tableau de structures par adresse sous vs 2013

Résolu
sncf71 Messages postés 5 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 16 septembre 2015 - Modifié par cptpingu le 23/01/2015 à 20:09
sncf71 Messages postés 5 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 16 septembre 2015 - 23 janv. 2015 à 23:35
Bonjour à tous.

J'ai un problème quand j'essai de passer un tableau de structures par adresse à une fonction :

struct {
CString MT;
CString marque;
}T;

const int NB = 500;
 
T tabfin[NB]; 


Le prototype de la fonction dans la classe vue est :
void supprimedoublons1(struct T (*p)[NB],int v);


Je declare p de cette façon :
T (*p)[NB];
p=&tabfin;

et j'essaie de passer le tableau tabfin précédent à la fonction comme ceci :
void CAlgebredeboolView::supprimedoublons1(T (*p)[NB],int uu){
 for (int i = 0; i <= uu + 1; i++){
  for (int j = i + 1; j <= uu + 1; j++){
   TRACE(_T("mt1=%s mt2=%s\n"), p[i]->MT, p[j]->MT);
   if (p[i]->MT.Compare(p[j]->MT) == 0 {
    for (int k = j; k <= uu+ 1; k++){
     p[k]->MT = p[k + 1]->MT;
     p[k]->marque = p[k + 1]->marque;
    }
    j = j - 1;
    p[uu]->MT = _T("");
    p[uu]->marque = _T("");
    uu = uu - 1;
     }

   if (p[i]->MT.Compare(p[j]->MT) != 0){
        }
   /*on ne fait rien dans ce cas*/
  }

 }
 co1 = uu;
}


Voila merci de votre aide

Edit admin: Coloration syntaxique.

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 23/01/2015 à 20:24
Bonjour.

Pourrais-tu reformuler ton problème, ce n'est pas très clair :(.

En attendant, je vais pointer quelques points perfectibles dans ton code:
- En C++, une structure et une classe, c'est la même chose (à part le niveau de visibilité par défaut). Donc il n'est pas nécessaire d'indiquer "struct" en argument d'une déclaration de fonction.
- En C++ la déclaration de ta struct serait la suivante:
struct T
{
  std::string mt;
  std::string marque;
};

- Je ne comprends pas la déclaration suivante: T (*p)[NB], un tableau de "T" devrait être T p[NB] ("p" est alors déjà un pointeur vu qu'un tableau est un pointeur).
- En C++ on évite les anciennes constructions du C. Donc pour un tableau à taille variable, on préfère un std::vector<T> (dont on peut forcer une taille via .resize(NB) si nécessaire), pour un tableau à taille fixe, un std::array<T, NB>.
- "j = j - 1" pourrait s'écrire plu succinctement en "--j" (pareil pour les autres cas identiques).

Pour supprimer des doublons d'un tableau, on préfère généralement la méthode suivante:
- Utilisation d'un std::vector
- tri via std::sort
- dédoublonnage via std::unique

Ex:
// #include <algorithm>

std::vector<int> tab{1, 2, 2, 2, 3, 3, 2, 2, 1};
std::sort(tab.begin(), tab.end());
std::unique(tab.begin(), tab.end());
for (auto elt : tab)
  std::cout << elt << " ";
std::cout << "\n";

Affichera: 1 2 3

(Fonctionne de manière générique et pas seulement avec des int).

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
sncf71 Messages postés 5 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 16 septembre 2015
23 janv. 2015 à 23:35
Bonsoir ,
Merci pour ton aide je vais essayer d'améliorer mes connaissances en utilisant et appliquant ce que tu proposes. J'ai réussi à améliorer les choses en effet j'ai transformé le fameux T (*p)[] en T p[] qui fonctionne mieux effectivement . Bonne soirée. Merci encore .
0
Rejoignez-nous