高手教我怎样构造一个集合类?

flyingghost 2003-05-13 07:04:26
我想实现一个集合类,就是可以实现集合的一般操作,想用链表来存储。但是遇到一个问题,就是怎样存储不同类型的数据。我想存储一个内容地址再加一个类型标识,但这样就带来一个问题如果对象已经delete了但集合里还留一个地址怎么办?还有就是怎样标识不同的对象甚至未知的类别?请高手指点一下思路!

标准库里面有没有集合的实现?如果有,怎么使用?怎么实现的?
...全文
10 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shishiXP 2003-05-14
模板
回复
johnny_jiang 2003-05-14
UP!
回复
hangdian 2003-05-14
#include<iostream.h>
struct Node
{
int idata;
struct Node* next;
};
class set
{
public:
set();
set( set&);
~set();
set& operator<<(int);
bool IsMemberof(int);
set operator+(set&);
set operator^(set&);

private:
Node *pHead;
Node *pTail;
friend ostream& operator<<(ostream&, set&);
};

set::set():pHead(NULL),pTail(NULL)
{
}
set::set( set&a)
{
Node *p;
Node *q;
pHead=NULL;
p=a.pHead;
while(p!=NULL)
{q=new Node;
q->idata =p->idata ;
q->next =NULL;
if(pHead==NULL)
pHead=pTail=q;
else
{pTail->next =q;
pTail=q;
}
p=p->next ;
}
}

set::~set()
{
Node *p;
Node *q;
p=pHead;
while(p!=NULL)
{
q=p->next ;
delete p;
p=q;
}
}
bool set::IsMemberof(int a)
{
Node *p;
p=pHead;
while(p!=NULL)
{
if(p->idata ==a)

return true;
p=p->next ;
}
return false;



}
set &set::operator<<(int a)
{
if(IsMemberof(a))
return *this;


Node *p=new Node;
p->idata =a;
p->next =NULL;
if(pHead==NULL)
{ pHead=pTail=p;

}
else
{
pTail->next =p;
pTail=p;

}

return *this;
}


set set::operator+(set&a)
{
set t=*this;
Node *p=a.pHead;
while(p!=NULL)
{
if(!IsMemberof(p->idata ))
t<<p->idata ;
p=p->next ;
}
return t;
}

set set::operator^(set&a)
{
set t;
Node*p=a.pHead;
while(p!=NULL)
{
if(IsMemberof(p->idata))
t<<p->idata ;
p=p->next ;
}
return t;
}


ostream& operator<<(ostream&os, set& a)
{
os<<'{';
Node* p=a.pHead;
while(p!=NULL)
{
if(p!=a.pHead)
os<<',';
os<<p->idata ;
p=p->next;
}
os<<'}';
return os;
}

int main()
{
set a;
cout<<a<<endl;
a<<1<<2<<3;
cout<<a<<endl;
set b;
b<<2<<3<<4;
set c=a+b;
cout<<c<<endl;
set d=a^b;
cout<<d<<endl;
return 0;
}
回复
hydra1101 2003-05-14
想用链表来存储
====
C++尽量避免内存操作,你这个可以换成list或者vector实现。
不知道你要实现的是什么,如果只是集合类的话,应该不需要关系它的数据类型(除非你设计不合理,要使用该数据类型的特殊操作)。
如果需要对存储的数据类型分别处理的话,我觉得可以做一个接口,能够被它存储的对象必须实现这个接口。
回复
snipersu 2003-05-13
template
来实现不同的数据类型.

标准库里有set,不过自己看书吧!
回复
发动态
发帖子
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告