0

我正在尝试逐个元素地比较两个 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

4 回答 4

15

以下怎么样?

#inlcude <算法>

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

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

于 2009-10-04T14:45:21.600 回答
2

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

于 2009-10-04T15:03:55.603 回答
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;
}

希望我有所帮助!

于 2009-10-04T15:16:15.143 回答
0

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

只需删除“*”,它应该可以工作。

于 2009-10-04T14:46:25.170 回答