集合的并交叉运算

实验代码:

#include<set>

#include<iostream>

#include<iterator>

#include<algorithm>

using namespace std;

void in(set<string> &A)

{

    int n;

    string value;

    cin>>n;

    for(int i=1;i<=n;i++)

    {

        cin>>value;

        A.insert(value);

    }

}

void out(set<string> &A)

{

    set<string>::iterator it=A.begin();

    while(it!=A.end())

    {

        cout<<*it<<" ";

        it ++;

    }

}

void jiao(set<string> &A,set<string> &B,set<string> &C)

{

    set<string>::iterator it;

    it=A.begin();

    while(it!=A.end())

    {

        if(B.find(*it)!=B.end())

            C.insert(*it);

        it++;

    }

}

void bing(set<string> &A,set<string> &B,set<string> &C)

{

    set<string>::iterator it;

    it=A.begin();

    while(it!=A.end())

    {

        C.insert(*it);

        it++;

    }

    it=B.begin();

    while(it!=B.end())

    {

        C.insert(*it);

        it++;

    }

}

void cha(set<string> &A,set<string> &B,set<string> &C)

{

    set<string>::iterator it;

    it=A.begin();

    while(it!=A.end())

    {

        if(B.find(*it)==B.end())

            C.insert(*it);

        it++;

    }

}

int main(){

    set<string> b,j,c1,c2;

    set<string> A,B;

    cout<<"请分别输入集合A中元素个数和元素: ";

    in(A);

    cout<<"请分别输入集合B中元素个数和元素: ";

    in(B);

    jiao(A,B,j);

    bing(A,B,b);

    cha(A,B,c1);

    cha(B,A,c2);

    cout<<"A交B:";

    out(j);

    cout<<endl;

    cout<<"A并B:";

    out(b);

    cout<<endl;

    cout<<"A-B:";

    out(c1);

    cout<<endl;

    cout<<"B-A:";

    out(c2);

    cout<<endl;

    return 0;

}

 

代码分析:

  • 整体思路:因为set中没有重复元素,所以可利用set集合,这样能够免去去重步骤。先用set集合中的insert()方法对元素进行添加;然后将并交叉作为三个void函数,参数为三个set集合(A、B、C),A、B是已经添加完元素的集合,用来运算,C是空集合,用来装入A、B运算完之后的元素;最后输出集合C中的元素,即运算结果。为减少代码量,元素的输入和输出可以自定义函数(in、out)。
  •  集合“并”运算bing

void bing(set<string> &A,set<string> &B,set<string> &C)

{//A、B是已经添加完元素的集合,C是空集合

    set<string>::iterator it;//迭代器it

    it=A.begin();//it指向A的第一个元素

    while(it!=A.end())

    {

        C.insert(*it);

        it++;

    }//将A中元素添加到C中

    it=B.begin();//it指向B的第一个元素

    while(it!=B.end())

    {

        C.insert(*it);

        it++;

    }//将B中元素添加到C中

}

  •  集合“交”运算jiao

void jiao(set<string> &A,set<string> &B,set<string> &C)

{//A、B是已经添加完元素的集合,C是空集合

    set<string>::iterator it;//迭代器it

    it=A.begin();//it指向A的第一个元素

    while(it!=A.end())

    {

        if(B.find(*it)!=B.end())

            C.insert(*it);//若B中存在A中的元素*it,则C添加元素*it

        it++;

    }

}

  • 集合“叉”运算cha

void cha(set<string> &A,set<string> &B,set<string> &C)

{//A、B是已经添加完元素的集合,C是空集合

    set<string>::iterator it;//迭代器it

    it=A.begin();//it指向A的第一个元素

    while(it!=A.end())

    {

        if(B.find(*it)==B.end())

            C.insert(*it);//若B中不存在A中的元素*it,则C添加元素*it

        it++;

    }

}

  • 输入函数in

void in(set<string> &A)

{

    int n;//n为集合元素个数

    string value;//value为元素值

    cin>>n;

    for(int i=1;i<=n;i++)

    {

        cin>>value;

        A.insert(value);//将元素value添加到A中

    }

}

   输出函数out

void out(set<string> &A)

{

    set<string>::iterator it=A.begin();//迭代器it指向集合的第一个元素

    while(it!=A.end())

    {

        cout<<*it<<" ";

        it ++;

    }

}

 

 

实验总结:

①本次实验用到了set集合中的迭代器、insert()方法等,对set集合的运用更加深入。

②set集合中没有重复的元素,利用这一点,可以省去集合的去重这一步骤,减少代码量。

③对于元素的输入输出,可以写两个自定义函数in和out,减少代码量。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十只兔子OVO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值