Comment puis-je vérifier si les premiers "n" éléments de deux vecteurs sont égaux ou non?
J'ai essayé ce qui suit:
#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"?
Utilisez le std::equal
fonction de la <algorithm>
entête:
if (std::equal(v1.begin(), v1.begin() + n, v2.begin())
std::cout << "success" << std::endl;
Notez que les deux vecteurs doivent contenir au moins n
éléments. Si l'un ou l'autre est trop court, le comportement de votre programme ne sera pas défini.
Si vous voulez vérifier si le vecteur entier est égal à l'autre, comparez-les comme vous compareriez autre chose:
if (v1 == v2)
Votre code (en échec) comparait un itérateur d'un vecteur avec un itérateur de l'autre. Les itérateurs de vecteurs égaux ne sont pas égaux. Chaque itérateur est lié à la séquence qu'il itère, donc un itérateur d'un vecteur ne sera jamais égal à l'itérateur d'un autre.
La façon la plus simple (en termes de nombre 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;
}
Cela fera à peu près la même chose, mais si vous préférez, vous pouvez utiliser le <algorithm>
en-tête std::equal
fonction: http://www.cplusplus.com/reference/algorithm/equal/