0

2 つの 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

を行う場合if(*ints[i] != obj.ints[i])、比較しているのは、それ自体の内容ではなく、 のints[i]内容と が指すアドレスです。これは、配列の名前が既に配列の最初の要素へのポインターであるためです。添え字を追加すると、その配列の最初の位置から i 番目の位置を探すことになります。そのため、 は必要ありません。obj.ints[i]ints[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 に答える
2

そもそもなぜ配列を使用しているのか、誰も尋ねられないことに驚いています。配列を避けるのが難しい場所もありますが、それらはほとんどありません。ほとんどのコードは通常、代わりに std::vector を使用するとより単純になります。std::vector は operator== をオーバーロードするため、この場合に行う必要があるif (a==b) ...のはoperator== のも)。

于 2009-10-04T15:03:55.603 に答える
0

これはすべて「class Object {」と「}」でラップされていると思いますか?

「*」を削除するだけで機能します。

于 2009-10-04T14:46:25.170 に答える