这两种比较STL向量的方法有什么区别?

5

在线上很少能找到使用等号运算符来比较两个STL vector对象的内容以验证它们是否相同的示例。

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 vector的方式有何区别?

1
没有区别。 - Daniel Frey
2个回答

8
两者的行为完全相同。容器要求(Table 96)表明a == b 的操作语义为:
distance(a.begin(), a.end()) == distance(b.begin(), b.end()) &&
equal(a.begin(), a.end(), b.begin())

Kerrek SB,Table 96 是什么? - astidham2003
1
等号运算符是如何定义的?也就是说,为什么不使用size()而使用distance()呢? - Ryan Guthrie
1
@RyanGuthrie: "操作语义"。一切可能都是内联的,而且size()通常被计算为差异。别担心。 - Kerrek SB
1
@AStidham:C++11标准中的第96个表,名为“容器要求”。 - Mike Seymour

5

很好的问题。我怀疑人们不使用 == ,是因为他们不知道它的存在,但它确切地做了手动编写版本所做的事情。对于序列容器和关联容器,它一直存在。


这对于C++03中的向量是否相同? - Fantastic Mr Fox
2
@Ben - 是的,这一直是这样。而且我在最初的回答中记错了;关联容器始终具有==(和!=)。 - Pete Becker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接