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"?
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.
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/