Mystère de la comparaison de l'égalité des tableaux : pourquoi == n'est-il pas égal aux tableaux ?
Considérez l'extrait de code suivant :
int main() { int iar1[] = {1, 2, 3, 4, 5}; int iar2[] = {1, 2, 3, 4, 5}; if (iar1 == iar2) cout << "Arrays are equal."; else cout << "Arrays are not equal."; }
Au grand désarroi de beaucoup, ce code affiche de manière incorrecte "Les tableaux ne sont pas égaux". Pourquoi cette comparaison échoue-t-elle de manière si inattendue ?
Array Decayed Unraveled
La raison réside dans le concept de « dégradation des tableaux ». En C , les tableaux se désintègrent automatiquement en pointeurs vers leurs premiers éléments lorsqu'ils sont utilisés dans certains contextes, comme dans l'opérateur de comparaison ici. En conséquence, iar1 et iar2 comparent efficacement les adresses des premiers éléments, qui sont distinctes pour différents tableaux.
Comparaison par éléments
Pour déterminer correctement si deux les tableaux ont les mêmes éléments, une comparaison par élément est requise. Pour y parvenir, on peut soit implémenter une boucle pour comparer chaque élément individuellement, soit utiliser le conteneur std::array de la bibliothèque standard C.
std::array to the Rescue
std::array est un conteneur de taille fixe qui se comporte comme un tableau mais fournit des fonctionnalités supplémentaires, notamment la possibilité de comparer deux tableaux pour une égalité entre éléments. Voici un extrait de code révisé utilisant std::array :
std::array<int, 5> iar1 {1, 2, 3, 4, 5}; std::array<int, 5> iar2 {1, 2, 3, 4, 5}; if (iar1 == iar2) { // arrays contents are the same } else { // not the same }
Maintenant, le code affichera correctement "Les tableaux sont égaux."
Récapitulatif de la sagesse
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!