在下面的代码中,我的印象是,所有3个“相等”检查都是等价的,但是最后一个检查似乎返回了与其他2不同的结果--为什么会这样呢?
#include <cstdio>
#include <vector>
#include <algorithm>
int main()
{
{
std::vector<double> d0 { 0.0 , 1.0, 2.0};
std::vector<double> d1 { 1.0 , 2.0, 3.0};
d0[0] += double(1);
d0[1] += double(1);
d0[2] += double(1);
if (std::equal(std::begin(d0),std::end(d0),std::begin(d1)))
printf("equal\n");
else
printf("not equal\n");
if (d0 == d1)
printf("equal\n");
else
printf("not equal\n");
}
{
double d0[] { 0.0 , 1.0, 2.0};
double d1[] { 1.0 , 2.0, 3.0};
d0[0] += double(1);
d0[1] += double(1);
d0[2] += double(1);
if (std::equal(d0,d0 + sizeof(d0),d1))
printf("equal\n");
else
printf("not equal\n");
}
return 0;
}
发布于 2014-11-30 03:59:14
最后一个表达式并不相等,因为这个表达式d0 + sizeof(d0)
没有做您期望的事情。应用于数组的sizeof
计算值为数组的大小(以字节为单位),而不是数组中的元素数。因此,您不是要为d0
中的最后一个元素创建迭代器。
代之以其中之一
if (std::equal(d0, d0 + sizeof(do0)/sizeof(d0[0]), d1))
或
#include <type_traits>
...
if (std::equal(d0, d0 + std::extent<decltype(d0)>::value, d1))
或
#include <iterator>
...
if (std::equal(std::begin(d0), std::end(d0), d1))
https://stackoverflow.com/questions/27209780
复制相似问题