c++交集和并集问题。。。

来源:百度知道 编辑:UC知道 时间:2024/05/28 07:39:18
list<T>& list<T>::Intersect(const list<T>& s) const // Intersection
{
static list s_ret;

Node<T> * temp = m_phead;
while (temp != NULL)
{
if (s.Find(temp->data) != -1)
{
s_ret.insert(temp->data);
}

temp = temp->next;
}

return s_ret;
}

这段代码是求交集的,但我不知道为什么要用static? 还有while (temp != NULL)
{
if (s.Find(temp->data) != -1)
{
s_ret.insert(temp->data);
}

temp = temp->next;
}
不知道是什么意思? 请大家教下我啊。。。谢谢

还有并集:

list<T>& list<T>::Union(const list<T>& s) const //Union function
{
static list<T> s_ret;
Node<T> * temp = m_phead;
while (temp != NULL) <

1、为什么要用static?
我估计是这样:
s_ret这个变量(好像应该叫实例)是要return的,而在函数中定义的变量,在函数返回后,就不存在了,那返回就没有意义了。所以要加个static。

2、那个循环的意思就是访问本链表的所有结点,如果某个结点的数据不在s链表中,就将该数据插入s_ret中。
Node<T> * temp = m_phead; //temp初值等于本链表首结点
while (temp != NULL) //当该结点存在的话
{
if (s.Find(temp->data) != -1) //如果s链表中没有数据与temp所指结点中的数据相同
{
s_ret.insert(temp->data); //插入该数据到s_ret中
}
temp = temp->next; //temp指向下一个结点
}

3、那两个循环虽然一样,但temp的初值不一样
第一个是本链表的首结点,循环就是访问本链表的所有结点,并插入s_ret中
第二个是s链表的首结点,循环就是访问s链表的所有结点,并插入s_ret中

不知我说的对不对,也不知有没有说清楚

static list s_ret的直如果不用静态下次进入这个函数的时候list s_ret的直又是个定义list s_ret的直 用了静态每次执行函数的时候list s_ret的直会保存改变后的直 while (temp != NULL) temp是指像头的 当头不为空的时候执行循环进入循环体内 并集的2个循环不一样用模版类类型指针在第一个循环的时候插入第一个集合`第2个循环temp = s.m_phead这里的s是另一个对象的引用就是另一个集合`把第1个链表的数据丢进去`然后第2个循环把第2个链表的数据丢了进去`这样2个链表的数据都进去了``不就是并在一起了么`