2013-03-06 6 views
5

Einige online verfügbare Beispiele verwenden den Gleichheitsoperator, um den Inhalt von zwei STL vector Objekten zu vergleichen, um zu verifizieren, dass sie denselben Inhalt haben.Was ist der Unterschied zwischen diesen beiden Möglichkeiten zum Vergleich von STL-Vektoren?

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; 

Stattdessen las ich andere Beispiele, wo die std::equal() Funktion verwendet wird.

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

Was ist der Unterschied zwischen diesen beiden Möglichkeiten zum Vergleich von STL-Vektoren?

+1

Es gibt keinen Unterschied. –

Antwort

8

Die beiden verhalten sich genau gleich. Die Container-Anforderungen (Tabelle 96) sagen, dass a == b hat die operationale Semantik von:

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

Kerrek SB, was ist Tabelle 96? – astidham2003

+1

Wie ist der gleiche Operator definiert? IOW, warum nicht Größe() anstelle von Entfernung verwenden? –

+1

@RyanGuthrie: "operative Semantik". Wahrscheinlich ist sowieso alles inline, und 'size()' wird normalerweise als Differenz berechnet. Schwitz es nicht. –

5

Gute Frage. Ich vermute, dass Leute == nicht benutzen, weil sie dort nicht wissen, aber es tut genau, was die handkodierte Version tut. Es war schon immer für Sequenzcontainer und für assoziative Container da.

+0

Ist das gleich für Vektoren in C++ 03 –

+2

@ Ben - ja, es war schon immer so. Und ich erinnerte mich in meiner ursprünglichen Antwort falsch; Assoziative Container hatten immer auch '==' (und '! ='). –

Verwandte Themen