| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2359 人关注过本帖
标题:c++类的构造
只看楼主 加入收藏
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
结帖率:87.5%
收藏
 问题点数:0 回复次数:2 
c++类的构造
麻烦大神帮我写一下这个,我想和自己写的对比一下。

1、设计一个集合(Set)类。Set可以包含零个或多个无序的非重复元素。每个元素都是整数。公有接口包括如下成员函数:
(1)创建一个Set,包括普通构造函数、拷贝构造函数、默认构造函数、恰当析构函数;
(2)增加一个元素到Set;
(3)从Set中删除一个元素;
(4)显示Set中所有元素;
(5)s1和s2都是Set对象,计算它们的交集;
(6)s1和s2都是Set对象,计算它们的并集;
(7)s1和s2都是Set对象,计算它们的差集;
(8)判断两个集合是否相等;
(9)判断一个集合是否包含在另一个集合中;
(10)判断集合是否为空;
(11)给出集合大小;
(12)清空一个集合;
编写主函数,能够实现下列操作:
1 – 创建集合 s1 & s2和s3
2 – 向集合s1中添加一个元素
3 – 从集合s3中删除一个元素
4 – 计算s1和s2的交集
5 – 计算s1和s2的并集
6 – 计算s1和s2的差集
7 – 显示指定的集合
8 – 显示s1和s2是否相等
9 – 显示s1是否包含s2
10– 清空指定集合
11– 显示指定集合是否为空
12 - Quit program
所写的成员函数都有机会调用到。
搜索更多相关主题的帖子: 接口 元素 
2017-04-02 11:42
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
#include<iostream>
#include<vector>
using namespace std;
template<typename T>
class Set
{
private:
    vector<T> data;
protected:
    bool Find(T d)//查找
    {
        vector<T>::iterator itr;
        for(itr=data.begin();itr!=data.end();itr++)
            if(*itr==d)return true;
        return false;
    }
public:
    Set(){data.clear();}
    Set(vector<T> dd){data=dd;}
    Set(const Set&s){data=s.data;}
    ~Set(){data.clear();}
    bool Add(T d)
    {
        vector<T>::iterator itr=data.begin();
        for(;itr!=data.end();itr++)
            if(*itr==d) return false;
        data.push_back(d);return true;
    }
    bool BeIncluded(Set<T>s)//当前集合是否包含于集合s
    {
        vector<T>::iterator itr;
        for(itr=data.begin();itr!=data.end();itr++)
            if(!s.Find(*itr)) return false;
        return true;
    }
    void Clear(){data.clear();}
    bool Delete(T d)//按值删除
    {
        vector<T>::iterator itr=data.begin();
        for(;itr!=data.end();itr++)
            if(*itr==d)
            {
                data.erase(itr);
                return true;//返回
            }
        return false;
    }
    bool DeleteByIndex(int n)//按秩删除
    {
        if(n>=data.size()||n<0) return false;
        data.erase(data.begin()+n);return true;
    }
    bool Empty(){return data.empty();}
    bool Include(Set<T>s){return s.BeIncluded(*this);}
    int Scale(){return data.size();}//判断规模
    void Show()
    {
        vector<T>::iterator itr=data.begin();
        for(;itr!=data.end();itr++)
            cout<<*itr<<",";
        cout<<endl;
    }
    Set<T> operator-(Set<T>&s)
    {
        Set<T>result(*this);
        vector<T>::iterator itr;
        for(itr=s.data.begin();itr!=s.data.end();itr++)
            if(result.Find(*itr))
                result.Delete(*itr);
        return result;
    }
    bool operator==(Set<T>&s)//要考虑元素的无序性。
    {
        vector<T>::iterator itr;
        for(itr=data.begin();itr!=data.end();itr++)
            if(!s.Find(*itr)) return false;
        return data.size()==s.data.size();
    }
    friend Set<T> Intersection(Set<T>&A,Set<T>&B);
    friend Set<T> Union(Set<T>&A,Set<T>&B);
};
template<typename T>
Set<T> Intersection(Set<T>& A, Set<T>&B)
{
    Set<T>result;
    vector<T>::iterator itr;
    for(itr=A.data.begin();itr!=A.data.end();itr++)//通过友元关系访问私有成员data
        if(B.Find(*itr)) result.Add(*itr);
    return result;
}
template<typename T>
Set<T> Union(Set<T>&A,Set<T>&B)
{
    Set<T>result(A);
    vector<T>::iterator itr;
    for(itr=B.data.begin();itr!=B.data.end();itr++)
        result.Add(*itr);
    return result;
}
int main()
{
    Set<int> s1;
    s1.Add(3);s1.Add(9);s1.Add(40);
    Set<int> s2(s1);
    s1.Add(33);s2.Add(44);
    cout<<"集合一:";s1.Show();
    cout<<"集合二:";s2.Show();
    Set<int> s3=Intersection(s1,s2);
    cout<<"交集:";s3.Show();
    Set<int> s4=Union(s1,s2);
    cout<<"并集:";s4.Show();
    Set<int>s5=s1-s2;
    cout<<"集合一减去集合二:";s5.Show();
    s5.Clear();s5=s2-s1;
    cout<<"集合二减去集合一:";s5.Show();
    cout<<"被包含关系:"<<s5.BeIncluded(s2)<<endl;
    cout<<"包含关系:"<<s2.Include(s3)<<endl;
    cout<<"集合二规模:"<<s2.Scale()<<"集合四规模:"<<s4.Scale()<<endl;
    Set<int>s6;s6.Add(9);s6.Add(3);s6.Add(40);s6.Add(33);
    cout<<"集合一与集合六判等:"<<(s1==s6)<<endl;
    cout<<"集合二与集合六判等:"<<(s2==s6)<<endl;
    return 0;
}
//写了个有点冗余的,可能还没有你自己的写得好。
2017-04-07 21:07
育帝
Rank: 2
来 自:黑龙江哈尔滨
等 级:论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
收藏
得分:0 
回复 2楼 yangfrancis
万分感谢,写了这么多。我刚学c++,还有许多需要学习。借鉴您地代码我很荣幸。

育帝
2017-04-12 22:31
快速回复:c++类的构造
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021769 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved