2013-03-06 106 views
5

很少有可用的在線示例使用相等運算符來比較兩個STL對象的內容,以驗證它們是否具有相同的內容。這兩種比較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; 

取而代之,我讀了其他使用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()); 
} 

這兩種比較STL向量的方法有什麼區別?

+1

沒有區別。 – 2013-03-06 23:10:59

回答

8

兩者的行爲方式完全相同。容器要求(表96)說a == b具有操作語義:

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

Kerrek SB,表96是什麼? – astidham2003 2013-03-06 23:14:15

+1

平等運算符是如何定義的? IOW,爲什麼不使用size()而不是距離? – 2013-03-06 23:15:28

+1

@RyanGuthrie:「操作語義學」。無論如何,一切都可能被內聯,並且size()通常被計算爲一個差異。不要冒汗。 – 2013-03-06 23:18:48

5

好問題。我懷疑人們不會使用==,因爲他們不知道它的存在,但它確實是手寫代碼版本的作用。它一直在那裏用於順序容器和關聯容器。

+0

這是相同的向量在c + + 03 – 2013-03-06 23:21:28

+2

@本 - 是的,它一直是這種情況。我原來的回答誤會了;關聯容器一直有'=='(和'!=')。 – 2013-03-06 23:22:46

相關問題