Vérifier si deux vecteurs sont égaux

Comment puis-je vérifier si les premiers éléments "n" de deux vecteurs sont égaux ou non?

j'ai essayé le code suivant:

#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

typedef vector<double> v_t;

int main(){
    v_t v1,v2;
    int n = 9;

    for (int i = 1; i<10; i++){
        v1.push_back(i);
        v2.push_back(i);
    }
    v1.push_back(11);
    v2.push_back(12);

    if (v1.begin()+n == v2.begin()+n)
        cout << "success" << endl;
    else
        cout << "failure" << endl;
}

pourquoi affiche-t-il" échec "et non"succès"?

43
demandé sur Toby Speight 2011-03-08 07:15:42

2 réponses

std::equal de la fonction <algorithm> header:

if (std::equal(v1.begin(), v1.begin() + n, v2.begin())
  std::cout << "success" << std::endl;

Notez que les deux vecteurs doivent avoir au moins n éléments. Si l'un des deux est trop court, comportement de votre programme ne sera pas défini.

Si vous voulez vérifier si le le vecteur est égal à l'autre, comparez-les comme vous compareriez n'importe quoi d'autre:

if (v1 == v2)

votre code (échoué) comparait un iterator d'un vecteur avec un iterator de l'autre. Les itérateurs de vecteurs égaux ne sont pas égaux. Chaque itérateur est liée à la séquence de l'itération, donc un itérateur d'un vecteur ne sera jamais égale à l'itérateur de l'autre.

125
répondu Rob Kennedy 2016-01-27 17:28:55

la façon la plus facile (en termes de moins de fonctions non-quotidiennes à rechercher) de comparer les deux est de boucler à nouveau:

bool are_equal = true;
for (int i = 0; i < first_how_many; i++)
    if (v1[i] != v2[i])
    {
        are_equal = false;
        break;
    }

Il va faire la même chose, mais si vous le préférez, vous pouvez utiliser le <algorithm> de l'en-tête http://www.cplusplus.com/reference/algorithm/equal/

7
répondu Tony Delroy 2011-03-08 06:02:25