2013-03-06 118 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

相关问题