我正在读一些书,我遇到了一段代码,书中没有解释,但有一些部分让我非常困惑,粗体部分,我想知道它是关于什么的。
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);
}
它有什么作用,为什么 [] 括号内有两个参数?提前谢谢。
括号内的两个参数是使用逗号运算符的表达式。这种表达式的结果是最后一项的结果(j++, i++
给出 i 递增 1,而 j 也递增 1)。所以s.arrayA[i++] = s1.arrayA[j++,i++];
真的可以转换为相等的j++, s.arrayA[i++] = s1.arrayA[i++];
此代码与设置s1
和s2
相交。似乎代码表明数组(实现集)已排序。代码在s1.arrayA
和s2.arrayA
上行走,如果两个集合中都存在某个元素,则它将该元素放在s.arrayA
中。