2013-03-06 16 views
5

Alcuni esempi disponibili online utilizzano l'operatore di uguaglianza per confrontare il contenuto di due oggetti STL vector per verificare che abbiano lo stesso contenuto.Qual è la differenza tra questi due modi per confrontare i vettori STL?

vector<T> v1; 
// add some elements to v1 

vector<T> v2; 
// add some elements to v2 

if (v1 == v2) cout << "v1 and v2 have the same content" << endl; 
else cout << "v1 and v2 are different" << endl; 

Invece, ho letto altri esempi in cui viene utilizzata la funzione std::equal().

bool compare_vector(const vector<T>& v1, const vector<T>& v2) 
{ 
    return v1.size() == v2.size() 
      && std::equal(v1.begin(), v1.end(), v2.begin()); 
} 

Qual è la differenza tra questi due modi per confrontare i vettori STL?

+1

Non c'è differenza. –

risposta

8

I due si comportano esattamente nello stesso modo. I requisiti di container (Tabella 96) dire che a == b ha la semantica operative di:

distance(a.begin(), a.end()) == distance(b.begin(), b.end()) && 
equal(a.begin(), a.end(), b.begin()) 
+0

Kerrek SB, qual è la tabella 96? – astidham2003

+1

Come viene definito l'operatore uguale? IOW, perché non usare size() al posto della distanza? –

+1

@RyanGuthrie: "semantica operativa". Tutto è probabilmente inline comunque, e 'size()' viene solitamente calcolato come differenza. Non sudare. –

5

Buona domanda. Sospetto che le persone non utilizzino lo == perché non lo sanno, ma fa esattamente quello che fa la versione codificata a mano. È sempre stato lì per contenitori sequenziali e contenitori associativi.

+0

È lo stesso per i vettori in C++ 03 –

+2

@ Ben - sì, è sempre stato così. E mi sono ricordato male nella mia risposta originale; i contenitori associativi hanno sempre avuto anche '==' (e '! ='). –

Problemi correlati