1

私はある本を読んでいて、その本で説明されていないコードに遭遇しましたが、私には非常に混乱する部分、太字の部分があり、それが何であるかを知りたいです。

void Set::intersection(const Set& s1, const Set& s2)
{
    Set s;
    s.arrayA = new double[ s1.sizeA<s2.sizeA ? s1.sizeA : s2.sizeA];
    int i, j, k;
    while(i < s1.sizeA && j < s2.sizeA)
        if(s1.arrayA[i] < s2.arrayA[j])
            i++;
        else if (s1.arrayA[i] > s2.arrayA[j])
            j++;
        else
            s.arrayA[k++] = s1.arrayA[j++,i++]; // question is about this line

    s.sizeA= k;
    deleteA();
    copyA(s);  
}

それは何をしますか、そしてなぜ[]括弧内に2つのパラメーターがあるのですか?前もって感謝します。

4

1 に答える 1

1

括弧内の2つのパラメーターは、コンマ演算子を使用した式です。このような式の結果は、最後の項目の結果です(j++, i++iは1ずつ増加し、jも1つ増加します)。だからs.arrayA[i++] = s1.arrayA[j++,i++];本当に等しいに変換することができますj++, s.arrayA[i++] = s1.arrayA[i++];

このコードは、セットとに交差します。コードは、(セットを実装する)配列がソートされていることを示唆しているようです。コードは進んでおり、両方のセットに要素が存在する場合は、その要素をに配置します。s1s2s1.arrayAs2.arrayAs.arrayA

于 2012-06-17T19:14:32.273 に答える