【发布时间】:2022-01-08 14:36:46
【问题描述】:
我正在使用<algorithm> 中定义的std::equals 来检查两个向量是否相等。当第二个向量为空时它会崩溃。我可以通过检查第二个向量是否为空来避免崩溃,但是是否有理由不将检查包含在 equal 函数本身中?
示例代码:
std::vector<int> a;
for (int i = 0; i < 3; ++i) a.emplace_back(i);
std::vector<int> b;
for (int i = 0; i < 0; ++i) b.emplace_back(i);
std::equal(a.begin(), a.end(), b.begin());
【问题讨论】:
-
您使用了错误的重载,您调用的重载要求最后一个参数引用的容器至少具有与第一个容器一样多的元素
-
因为 b 中的迭代器超出了范围。 equal 不检查只是迭代的容器的大小 (stackoverflow.com/questions/2457072/…)
-
只需使用 : (a==b) 它是为向量实现的,并且也会检查容器的大小。 en.cppreference.com/w/cpp/container/vector/operator_cmp
-
@UnholySheep 我在cplusplus.com/reference/algorithm/equal 上没有发现任何其他过载。只有其他重载需要指定比较函数。你能指出要使用的重载吗?