Maison > développement back-end > C++ > Comment utiliser correctement les fonctions membres pour le tri en C ?

Comment utiliser correctement les fonctions membres pour le tri en C ?

Patricia Arquette
Libérer: 2024-12-08 22:17:14
original
880 Les gens l'ont consulté

How to Correctly Use Member Functions for Sorting in C  ?

Fonctions membres comme comparaison pour le tri

Lors de l'utilisation des fonctions membres comme critères de comparaison pour le tri, des erreurs de compilation peuvent survenir en raison de la restriction imposée par la norme ISO C. Cette norme interdit l’adressage direct d’une fonction membre non statique non qualifiée ou entre parenthèses pour dériver un pointeur vers une fonction membre. Une telle erreur peut être rencontrée lors de la tentative de tri d'un tableau au sein d'une classe.

Pour résoudre ce problème, une solution consiste à déclarer la fonction de comparaison doCompare comme statique. Cependant, si la fonction s'appuie sur les données de l'instance MyClass, une approche alternative consiste à transformer la classe en foncteur de comparaison. Cela implique de modifier doCompare pour implémenter la fonction Operator() et d'appeler std::sort comme suit :

doSort() { std::sort(arr,arr+someSize, *this); }
Copier après la connexion

De plus, cela vaut la peine de considérer la valeur de retour manquante dans la méthode doSort. Pour une implémentation complète, cela devrait ressembler à :

int* doSort() { std::sort(arr,arr+someSize, &doCompare); return arr; }
Copier après la connexion

Alternativement, on peut utiliser std::mem_fun et contraignant pour transformer la fonction membre en une fonction libre. Une autre option consiste à intégrer la fonction dans la classe, comme démontré dans l'extrait suivant :

class MyClass {
   struct Less {
       Less(const MyClass& c) : myClass(c) {}
       bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'} 
       MyClass& myClass;
   };
   doSort() { std::sort(arr,arr+someSize, Less(*this)); }
};
Copier après la connexion

En sélectionnant l'une de ces approches, les développeurs peuvent gérer avec succès le tri d'un tableau au sein d'une classe à l'aide d'une fonction membre. comme critère de comparaison.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal