首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用std::equal和equal操作符进行比较

使用std::equal和equal操作符进行比较
EN

Stack Overflow用户
提问于 2014-11-30 03:45:49
回答 1查看 372关注 0票数 0

在下面的代码中,我的印象是,所有3个“相等”检查都是等价的,但是最后一个检查似乎返回了与其他2不同的结果--为什么会这样呢?

代码语言:javascript
运行
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-30 03:59:14

最后一个表达式并不相等,因为这个表达式d0 + sizeof(d0)没有做您期望的事情。应用于数组的sizeof计算值为数组的大小(以字节为单位),而不是数组中的元素数。因此,您不是要为d0中的最后一个元素创建迭代器。

代之以其中之一

代码语言:javascript
运行
复制
if (std::equal(d0, d0 + sizeof(do0)/sizeof(d0[0]), d1))

代码语言:javascript
运行
复制
#include <type_traits>

...

if (std::equal(d0, d0 + std::extent<decltype(d0)>::value, d1))

代码语言:javascript
运行
复制
#include <iterator>

...

if (std::equal(std::begin(d0), std::end(d0), d1))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27209780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档