定义元素类型为int、元素个数不受限制的集合类Set, 包括:<=(包含于)、==(相等)、!=(不等)、 |(并集)、 &(交集)、-(差集)、+=(增加元素)、-=(删除元素)等操作

什么都不多说了,直接上代码= =、

感谢汪二的帮忙,不然一直都有问题>.<考试的时候能把汪二随身携带就好啦可怜

但是呢,还是要自力更生啦奋斗

#include <iostream>
using namespace std;
struct IntSet{
	int *inset;
};
class Set{
private:
	int size;
	int *elements;
public:
	Set(){size = 0;elements = NULL;}
	void show();
	bool operator <=(Set &s);
	bool operator ==(Set &s);
	bool operator !=(Set &s);
	Set & operator |(Set &s);
	Set & operator &(Set &s);
	Set & operator -(Set &s);
	void operator +=(int x);
	void operator -=(int x);
	~Set(){if (elements!=NULL){
	    delete []elements;
	}
	}

};

void Set::show(){
	for (int i = 0;i<size;i++)
	{
		cout<<elements[i]<<" "
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是Intset类的定义: Intset.h ```c++ #ifndef INTSET_H #define INTSET_H class IntSet { public: IntSet(); IntSet(const IntSet& s); ~IntSet(); bool is_empty() const; int size() const; bool is_element(int e) const; bool is_subset(const IntSet& s) const; bool is_equal(const IntSet& s) const; bool insert(int e); bool remove(int e); IntSet union2(const IntSet& s) const; IntSet intersection2(const IntSet& s) const; IntSet difference2(const IntSet& s) const; private: int* data; int count; int capacity; void resize(); void copy(const IntSet& s); }; #endif ``` Intset.cpp ```c++ #include "IntSet.h" #include <algorithm> #include <cstring> IntSet::IntSet() : data(nullptr), count(0), capacity(0) {} IntSet::IntSet(const IntSet& s) : data(nullptr), count(0), capacity(0) { copy(s); } IntSet::~IntSet() { delete[] data; } bool IntSet::is_empty() const { return count == 0; } int IntSet::size() const { return count; } bool IntSet::is_element(int e) const { for (int i = 0; i < count; i++) { if (data[i] == e) { return true; } } return false; } bool IntSet::is_subset(const IntSet& s) const { for (int i = 0; i < s.count; i++) { if (!is_element(s.data[i])) { return false; } } return true; } bool IntSet::is_equal(const IntSet& s) const { if (count != s.count) { return false; } for (int i = 0; i < count; i++) { if (!s.is_element(data[i])) { return false; } } return true; } bool IntSet::insert(int e) { if (is_element(e)) { return false; } if (count == capacity) { resize(); } data[count++] = e; return true; } bool IntSet::remove(int e) { for (int i = 0; i < count; i++) { if (data[i] == e) { std::memcpy(data + i, data + i + 1, (count - i - 1) * sizeof(int)); count--; return true; } } return false; } IntSet IntSet::union2(const IntSet& s) const { IntSet result; for (int i = 0; i < count; i++) { result.insert(data[i]); } for (int i = 0; i < s.count; i++) { result.insert(s.data[i]); } return result; } IntSet IntSet::intersection2(const IntSet& s) const { IntSet result; for (int i = 0; i < count; i++) { if (s.is_element(data[i])) { result.insert(data[i]); } } return result; } IntSet IntSet::difference2(const IntSet& s) const { IntSet result; for (int i = 0; i < count; i++) { if (!s.is_element(data[i])) { result.insert(data[i]); } } return result; } void IntSet::resize() { int new_capacity = std::max(2 * capacity, 1); int* new_data = new int[new_capacity]; std::memcpy(new_data, data, count * sizeof(int)); delete[] data; data = new_data; capacity = new_capacity; } void IntSet::copy(const IntSet& s) { count = s.count; capacity = count; data = new int[capacity]; std::memcpy(data, s.data, count * sizeof(int)); } ``` main.cpp ```c++ #include "IntSet.h" #include <iostream> void print_set(const IntSet& s) { std::cout << "{ "; for (int i = 0; i < s.size(); i++) { std::cout << s.data[i] << " "; } std::cout << "}\n"; } int main() { IntSet s1; s1.insert(1); s1.insert(2); s1.insert(3); s1.insert(4); IntSet s2(s1); s2.remove(2); s2.insert(5); std::cout << "s1: "; print_set(s1); std::cout << "s2: "; print_set(s2); IntSet s3 = s1.union2(s2); std::cout << "s1 union s2: "; print_set(s3); IntSet s4 = s1.intersection2(s2); std::cout << "s1 intersection s2: "; print_set(s4); IntSet s5 = s1.difference2(s2); std::cout << "s1 difference s2: "; print_set(s5); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值