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);  
}

它有什么作用,为什么 [] 括号内有两个参数?提前致谢。

4

1 回答 1

1

括号内的两个参数是使用逗号运算符的表达式。这种表达式的结果是最后一项的结果(j++, i++给 i 加一,而 j 也加一)。所以s.arrayA[i++] = s1.arrayA[j++,i++];真的可以转化为equalj++, s.arrayA[i++] = s1.arrayA[i++];

此代码与集合和相交。似乎代码表明对数组(实现集合)进行了排序。代码正在运行,如果两个集合中都存在某个元素,则将该元素放在.s1s2s1.arrayAs2.arrayAs.arrayA

于 2012-06-17T19:14:32.273 回答