2011-03-08 34 views
40

¿Cómo puedo verificar si los primeros "n" elementos de dos vectores son iguales o no?Comprueba si dos vectores son iguales

He intentado lo siguiente:

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

¿Por qué se imprime "fracaso" y no "éxito"?

Respuesta

118

Utilice la función std::equal de la cabecera <algorithm>:

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

Tenga en cuenta que ambos vectores deben tener al menos n elementos en los mismos. Si cualquiera de los dos es demasiado corto, el comportamiento de su programa no estará definido.

Si desea comprobar si el toda vector es igual a la otra, sólo les compara como era de comparar cualquier otra cosa:

if (v1 == v2) 

Tu (fallido) de código comparaba un iterador de un vector con un iterador del otro. Iteradores de vectores iguales no son iguales. Cada iterador está vinculado a la secuencia que está iterando, por lo que un iterador de un vector nunca será igual al iterador de otro.

+19

No sabía que podría comparar vectores usando '==', ¡bastante bien, supongo! +1 – Marlon

+0

sí, tienes razón – Inverse

6

La forma más fácil (en términos de menor número de funciones no todos los días para mirar hacia arriba) forma de comparar los dos es un bucle de nuevo:

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

Te va a hacer lo mismo, pero si lo prefiere puede usar la función <algorithm> del encabezado std::equal función: http://www.cplusplus.com/reference/algorithm/equal/

Cuestiones relacionadas