Comparar Arrays em C++

Jinku Hu 12 outubro 2023
  1. Utilize a declaração for Loop para comparar arrays em C++
  2. Utilizar a Função Definida Personalizada para Comparar Arrays em C++
  3. Utilizar o algoritmo std::equal para comparar arrays em C++
Comparar Arrays em C++

Este artigo irá demonstrar múltiplos métodos de como comparar arrays em C++.

Utilize a declaração for Loop para comparar arrays em C++

Nestes exemplos, utilizaremos um contentor de array variável - std::vector. Esta classe tem um operador incorporado == que podemos utilizar para comparar os dois conteúdos de vectores dados. Neste caso, não precisamos de nos preocupar com diferentes comprimentos de vectores, uma vez que estes são tratados pelo método internamente. O valor de retorno é booleano com true, implicando dois comprimentos vectoriais iguais.

Note-se que avaliamos a expressão com ? : declaração condicional e impressão das mensagens de string correspondentes para a consola.

#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;
}

Resultado:

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

Utilizar a Função Definida Personalizada para Comparar Arrays em C++

O método anterior pode ser generalizado na função de modelo do utilizador, e se necessário, podem ser adicionados códigos de retorno personalizados e tratamento de excepções. Neste exemplo, implementámos a função compareVectorContents que toma duas referências vector e avalia a condição de igualdade utilizando a estrutura 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

Utilizar o algoritmo std::equal para comparar arrays em C++

Outro método para comparar conteúdos de dois vectors é o algoritmo std::equal da biblioteca padrão C++, definido no ficheiro de cabeçalho <algorithm>. O método equal toma 4 parâmetros que representam 2 intervalos separados que precisam de ser comparados, fornecendo assim uma interface mais genérica para lidar com as comparações. Este método pode ser utilizado em intervalos formados com iteradores a partir de recipientes não ordenados, nomeadamente - std::unordered_set, std::unordered_map etc. O valor de retorno equal é booleano e retorna true se os elementos forem os mesmos em dois intervalos. Além disso, a função retorna false se os intervalos passados diferirem em comprimentos.

#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;
}

Resultado:

Vectors i_vec1 and i_vec2 are the same
Vectors i_vec1 and i_vec3 are not the same
Autor: 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

Artigo relacionado - C++ Array