Comparer les tableaux en C++

Jinku Hu 12 octobre 2023
  1. Utiliser l’instruction de boucle for pour comparer des tableaux en C++
  2. Utiliser une fonction définie sur mesure pour comparer des tableaux en C++
  3. Utilisez l’algorithme std::equal pour comparer des tableaux en C++
Comparer les tableaux en C++

Cet article présentera plusieurs méthodes de comparaison de tableaux en C++.

Utiliser l’instruction de boucle for pour comparer des tableaux en C++

Dans ces exemples, nous utiliserons un conteneur de tableau de variables - std::vector. Cette classe possède un opérateur intégré == que nous pouvons utiliser pour comparer le contenu des deux vecteurs donnés. Dans ce cas, nous n’avons pas à nous soucier des différentes longueurs de vecteurs, car elles sont traitées par la méthode en interne. La valeur de retour est booléenne avec true, impliquant l’égalité de deux vecteurs.

Notez que nous évaluons l’expression avec ? : déclaration conditionnelle et l’impression des messages de chaîne correspondants à la console.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec2 = {12, 32, 43, 53, 23, 25};
  vector<int> i_vec3 = {12, 32, 43, 53, 23, 65};

  i_vec1 == i_vec2
      ? cout << "Vectors i_vec1 and i_vec2 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec2 are not the same" << endl;

  i_vec1 == i_vec3
      ? cout << "Vectors i_vec1 and i_vec3 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec3 are not the same" << endl;

  return EXIT_SUCCESS;
}

Production :

Vectors i_vec1 and i_vec2 are not the same
Vectors i_vec1 and i_vec3 are the same

Utiliser une fonction définie sur mesure pour comparer des tableaux en C++

La méthode précédente peut être généralisée dans la fonction de modèle de l’utilisateur et, si nécessaire, des codes de retour personnalisés et un traitement des exceptions peuvent être ajoutés. Dans cet exemple, nous avons implémenté la fonction compareVectorContents qui prend deux références vector et évalue la condition d’égalité en utilisant la structure if.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
bool compareVectorContents(vector<T> &vec1, vector<T> &vec2) {
  if (vec1 == vec2) {
    return true;
  } else {
    return false;
  }
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec3 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec4 = {12, 32, 43};

  compareVectorContents(i_vec1, i_vec3)
      ? cout << "Vectors i_vec1 and i_vec3 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec3 are not the same" << endl;

  compareVectorContents(i_vec1, i_vec4)
      ? cout << "Vectors i_vec1 and i_vec4 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec4 are not the same" << endl;

  return EXIT_SUCCESS;
}
Vectors i_vec1 and i_vec3 are the same
Vectors i_vec1 and i_vec4 are not the same

Utilisez l’algorithme std::equal pour comparer des tableaux en C++

Une autre méthode pour comparer le contenu de deux vector est l’algorithme std::equal de la bibliothèque standard C++, défini dans le fichier d’en-tête <algorithm>. La méthode equal prend 4 paramètres représentant 2 plages séparées qui doivent être comparées, fournissant ainsi une interface plus générique pour traiter les comparaisons. Cette méthode peut être employée sur des plages formées avec des itérateurs à partir de conteneurs non ordonnés, à savoir - std::unordered_set, std::unordered_map etc. La valeur de retour equal est booléenne et renvoie true si les éléments sont identiques dans deux intervalles. De plus, la fonction retournera false si les intervalles passés diffèrent en longueur.

#include <algorithm>
#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::equal;
using std::string;
using std::vector;

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec2 = {12, 32, 43, 53, 23, 65};
  vector<int> i_vec3 = {12, 32, 43};

  equal(i_vec1.begin(), i_vec1.end(), i_vec2.begin(), i_vec2.end())
      ? cout << "Vectors i_vec1 and i_vec2 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec2 are not the same" << endl;
  equal(i_vec1.begin(), i_vec1.end(), i_vec3.begin(), i_vec3.end())
      ? cout << "Vectors i_vec1 and i_vec3 are the same" << endl
      : cout << "Vectors i_vec1 and i_vec3 are not the same" << endl;

  return EXIT_SUCCESS;
}

Production :

Vectors i_vec1 and i_vec2 are the same
Vectors i_vec1 and i_vec3 are not the same
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ Array