我想使用该算法比较两组,equal
但它给了我一个错误。如何知道两个集合是否相等?
if(equal (a.begin(), a.end(), v.begin(), v.end())
你可以简单地说a == v
,也许. 它尽可能高效。a.size() == v.size() && a == v
(带有显式大小检查的后一种形式可能更好,因为集合迭代器不是随机访问的。)更新:尺寸检查是隐含的[感谢@juanchopanza!]
您可能会调用采用 3 个迭代器和一个附加谓词的std::equal
重载。因此,请忽略第二个结尾,因为它不会被解释为结尾迭代器,而是一个谓词,这是垃圾:
std::equal(a.begin(), a.end(), v.begin())
但是正如Mark在他的评论中在这种情况下所修改的那样,您必须事先确保两个容器的尺寸匹配,否则您将面临跑过第二组结束的风险。请注意,C++14 确实会引入std::equal
采用四个迭代器的重载(这是您的意图),并且会隐式执行大小检查,但您的实现似乎还不支持这一点。
除此之外,其他答案和评论都是正确的,因为a == v
它更简单、更清晰、更精简。