【问题标题】:Softball C++ question: How to compare two arrays for equality?垒球 C++ 问题:如何比较两个数组是否相等?
【发布时间】:2009-10-04 14:41:53
【问题描述】:

我正在尝试逐个元素地比较两个 int 数组,以检查是否相等。我似乎无法让它工作。也欢迎基本指针资源。谢谢!

int *ints;
ints = new int[10];

bool arrayEqual(const Object& obj)
{
    bool eql = true;

    for(int i=0; i<10; ++i)
    {
        if(*ints[i] != obj.ints[i])
            eql = false;
    }

    return eql;
}

【问题讨论】:

  • 取消引用任意指针类型对我来说似乎很可疑。
  • 不要有一个 eql 变量,为什么不替换 "eql = false;"通过“返回错误;”和“返回 eql;”通过“返回真实;”?行为应该相同,功能更快。

标签: c++ arrays equals


【解决方案1】:

下面的呢?

#inlcude bool arrayEqual(const Object& obj) { 返回 std::equal(ints,ints + 10, obj.ints); }

注意:equal 函数要求两个数组大小相等。

【讨论】:

  • 反注:它只要求后一个范围至少与第一个一样多。
【解决方案2】:

当你做if(*ints[i] != obj.ints[i])时,你比较的是ints[i]指向的地址和obj.ints[i]的内容,而不是ints[i]本身的内容。那是因为数组的名字已经是一个指向数组第一个元素的指针,当你添加下标时,你会在那个数组的第一个元素之后寻找第 i 个位置。这就是您不需要* 的原因。

正确的是:

int *ints;
ints = new int[10];

bool arrayEqual(const Object& obj)
{
    bool eql = true;

    for(int i=0; i<10; ++i)
    {
        if(ints[i] != obj.ints[i])
                eql = false;
    }

    return eql;
}

希望我能帮上忙!

【讨论】:

    【解决方案3】:

    我很惊讶没有人问你为什么首先使用数组。虽然有些地方很难避免阵列,但它们很少而且相距甚远。您的大多数代码通常使用 std::vector 会更简单。由于 std::vector 重载了 operator==,在这种情况下你所要做的就是if (a==b) ... 即使在少数几个不适合 vector 的地方,TR1::array 也会经常完成这项工作(和 IIRC,它也提供了 operator== 的重载)。

    【讨论】:

      【解决方案4】:

      我假设这都是由“类对象{”和“}”包装的?

      只需删除“*”即可。

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 2021-05-23
        • 1970-01-01
        相关资源
        最近更新 更多