繁体   English   中英

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

[英]Softball C++ question: How to compare two arrays for equality?

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

接下来呢?

#inlcude <algorithm>

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

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

我很惊讶没有人问您为什么要首先使用数组。 虽然在某些地方很难避免使用数组,但它们之间相距甚远。 通常,使用std :: vector可以简化大多数代码。 由于std :: vector重载了operator ==,因此在这种情况下,您所要做的只是if (a==b) ...即使在少数几个不适合使用vector的地方,TR1 :: array也会经常这样做作业(以及IIRC,它也提供了operator ==的重载)。

当执行if(*ints[i] != obj.ints[i]) ,您要比较的是ints[i]指向的地址与obj.ints[i]的内容,而不是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;
}

希望我能帮上忙!

我认为这全都由“类Object {”和“}”包裹了吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM