2013-03-06 16 views
5

Birkaç çevrimiçi örnek, aynı içeriğe sahip olduklarını doğrulamak için iki STL vector nesnenin içeriğini karşılaştırmak için eşitlik operatörünü kullanır.STL vektörlerini karşılaştırmak için bu iki yol arasındaki fark nedir?

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; 

Bunun yerine, std::equal() fonksiyonu kullanılır diğer örnekler okundu.

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 vektörlerini karşılaştırmak için bu iki yol arasındaki fark nedir?

+1

Fark yoktur. –

cevap

8

İki, tam olarak aynı şekilde davranır.

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

Kerrek SB, Tablo 96 nedir? – astidham2003

+1

Eşit operatör nasıl tanımlanır? IOW, neden mesafe yerine boy() kullanmıyorsunuz? –

+1

@RyanGuthrie: "operasyonel anlambilim". Her şey her halükarda zaten belirtilmiş ve 'size()' genellikle bir fark olarak hesaplanır. Terleme. –

5

İyi soru: konteyner gereksinimleri (Tablo 96) a == b operasyonel semantiğini sahip olduğunu söylüyorlar. İnsanların orada olduğunu bilmedikleri için =='u kullanmadıklarından şüpheleniyorum, ancak el ile kodlanmış sürümün tam olarak yaptığı şey bu. Sıra konteynırlar ve birleşik kaplar için her zaman oradaydı.

+0

Bu, C++ 03 –

+2

@Ben'deki vektörler için de geçerlidir - evet, her zaman böyle olmuştur. Ve orijinal cevabımda yanlış hatırladım; Birleştirici kapsayıcılar her zaman '==' (ve '! =') olmuştur. –

İlgili konular