setclass.cpp
来自「某个实验事编写粗糙集智能信息处理的程序」· C++ 代码 · 共 221 行
CPP
221 行
//globe.cpp
#include "StdAfx.h"
#include "SetClass.h"
#include "stdio.h"
////////////////////////////Set set set ////////////////////////////////////////////////////////////////
Set::Set()
{
pElement=NULL;
Card=0;
}
Set::~Set()
{
delete pElement;
}
Set::Set(int* pelement,int card)
{//card:集合元素个数 pelement为元素链表.实现拷贝
Card=card;
pElement=new int[card];
for(int i=0;i<card;i++){
pElement[i]=pelement[i];
}
}
////////////////////////////////////////////////////
void Set::SetParameter(int* pelement,int card)
{//功能同上面Set函数 card为分类数目
Card=card;
pElement=new int[card];
for(int i=0;i<card;i++){
pElement[i]=pelement[i];
}
}
int Set::GetElement(int n)
{
return pElement [n];//返回元素n
}
int Set::GetCard()
{//得到元素数目
return Card;
}
////////////////////////////////////////////////////////////////////////////////
Set& Set::operator -(Set& other)
{//集合相减A-B,得到C集合 返回集合指针
int i,j,k;
bool add;
int TemCard=Card;
int* pTem1=new int[TemCard];
int* pTem2=new int[TemCard];
for(i=0;i<TemCard;i++){
pTem1[i]=pElement[i];
}
delete[] pElement;
k=0;
for(i=0;i<TemCard;i++){
add=true;
for(j=0;j<other.Card ;j++){
if(other.pElement [j]==pTem1 [i]){
add=false;
break;
}
}
if(add){
pTem2[k]=pTem1 [i];
k++;
}
}
if(k!=0){
pElement=new int[k];
for(i=0;i<k;i++){
pElement[i]=pTem2[i];
}
}else{
pElement=NULL;
}
delete[] pTem1;
delete[] pTem2;
Card=k;
return *this;
}
//////////////////////////////////////////////////////////////////////////
Set& Set:: operator = (Set& other)
{ //集合相等赋值
int i;
if(Card!=0){
delete[] pElement;
}
if(other.GetCard ()==0){
Card=0;
pElement=NULL;
}else{
Card=other.Card ;
pElement= new int[Card];
for(i=0;i<Card;i++){
pElement[i]=other.pElement[i] ;
}
}
return *this;
}
///////////////////////////////////////////
Set& Set:: operator +(Set& other)
{//集合相加..集合中的元素相异,不存在相同元素
int i,j,k;
bool add=true;
int card=Card ;
Set thisSet;
thisSet.Card =card;
thisSet.pElement =new int[card];
for(i=0;i<card;i++){
thisSet.pElement [i]=pElement[i];
}
Card=Card+other.Card;
for(i=0;i<other.Card ;i++){//得到相加后的元素个数Card
for(j=0;j<thisSet.Card;j++){
if(thisSet.pElement [j]==other.pElement [i]){
Card--;
}
}
}
k=0;
delete pElement;
pElement=new int[Card];
for(i=0;i<thisSet.Card ;i++){
pElement [i]=thisSet.pElement [i];
}
for(i=0;i<other.Card;i++){
add=true;
for(j=0;j<thisSet.Card ;j++){
if(thisSet.pElement [j]==other.pElement [i]){
{
add=false;
break;
}
}
}
if(add){
pElement [k+thisSet.Card ]=other.pElement [i];
k++;
}
}
return *this;
}
//////////////////////////////Set set set ////////////////////////////////////////////////////////////////////////////////////////
////////////////////////Set Less Set/////////////////////////////////////////////////////////////////////////////////////////////////////////
bool Set::SetLessSet(Set& set1,Set& set2)
{//set1是否包含于set2中,yes:return true;else return false
int i,j;
int Same=0;
if(set1.GetCard ()>set2.GetCard ()){
return false;//集合1个数大于集合2个数,返回false
}
for(i=0;i<set1.GetCard ();i++){
for(j=0;j<set2.GetCard ();j++){
if(set2.GetElement (j)==set1.GetElement (i)){
{
Same++;//统计集合1中元素包含于集合2中元素的个数
break;
}
}
}
}
if(Same==set1.GetCard ()){
return true;
}
return false;
}
//////////////////////// set == set //////////////////////////////////////////////////////////////////////////////////////////
bool Set::SetEqualSet(Set& set1,Set& set2)
{//set1是否等于set2.yes:return true; No.return false
int i;
if(set1.GetCard ()!=set2.GetCard ()){
return false;
}
else{
for(i=0;i<set1.GetCard ();i++){
if(set1.GetElement (i)!=set2.GetElement (i)){
return false;
}
}
}
return true;
}
////////////////SetandSet//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Set::SetandSet(Set& Result,Set& set1,Set& set2)
{//得到两个集合之交集Result
int i,j;
int Card=0;
int MinCard=set1.GetCard ();
int* pEle;
if(set2.GetCard ()<MinCard){
MinCard=set2.GetCard ();
}
pEle=new int[MinCard];
for(i=0;i<set1.GetCard ();i++){
for(j=0;j<set2.GetCard ();j++){
if(set2.GetElement (j)==set1.GetElement (i)){
pEle[Card]=set1.GetElement (i);
Card++;
break;
}
}
}
Result.SetParameter(pEle,Card);
delete[] pEle;
}
bool Set::Replace(int Pos, int Val)
{//替换成功,返回true; else return false
int i;
if(Pos>Card-1){
return false;
}
for(i=0;i<Card;i++){
if(i==Pos){
pElement[i]=Val;
}
}
return true;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?