垒球C ++问题:如何比较两个数组的相等性?

时间:2009-10-04 14:41:53

标签: c++ arrays equals

我试图逐个元素地比较两个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;
}

4 个答案:

答案 0 :(得分:15)

以下怎么样?

#inlcude <algorithm>

bool arrayEqual(const Object& obj)
{
   return std::equal(ints,ints + 10, obj.ints);
}

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

答案 1 :(得分:2)

我很惊讶没有人问你为什么要首先使用数组。虽然有些地方阵列很难避免,但它们之间的距离很小。大多数代码通常使用std :: vector更简单。由于std :: vector重载了operator ==,在这种情况下你需要做的就是像if (a==b) ...这样的东西即使在少数地方那个向量不合适的地方,TR1 :: array也经常做这个工作(和IIRC) ,它提供了运算符==的重载。

答案 2 :(得分: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 :(得分:0)

我认为这完全由“class Object {”和“}”包裹?

只需删除“*”就可以了。