定义一个集合类 mySet,最多存放 100 个不重复的整数,实现集合的如下操作:
1)增加某个整型元素时,保证集合中没有重复元素;删除指定的元素,查找该元素在集合中
则从集合中删除该元素;
2)重载运算符“+”,实现两个集合对象的合并操作,重载运算符“”,求两个集合对象的交
集;例如 mySet s, s1, s2; s = s1+s2; s = s1 s2;
3)重载赋值运算符=和复合赋值运算符-= , 实现两个集合对象的赋值操作与差集操作。例如
mySet s1,s2;s1 = s2; s1-=s2; 集合 S1 中去掉 S2 中存在的元素。
#include <iostream>
using namespace std;
class mySet
{
public:
mySet(int);
mySet();
~mySet();
void add(int);
void del(int);
mySet operator+(const mySet&);
mySet operator*(const mySet&);
mySet& operator=(const mySet&);
mySet& operator-=(const mySet&);
friend ostream& operator<<(ostream&, mySet);
private:
int size;
int* n;
};
mySet::mySet(int a)
{
size = a;
bool flag = true;
n = new int[100]();
int temp;
for (int i = 0; i < size; i++)
{
cin >> temp;
for (int j = 0; j < i; j++)
{
if (n[j] == temp)
{
flag = false;
i--;
size--;
break;
}
}
if (flag)
{
n[i] = temp;
cout << "ok" << endl;
}
else
{
cout << "This integer is same as the former." << endl;
}
flag = true;
}
}
mySet::mySet() {
size = 0;
n = new int[100]();
}
mySet::~mySet()
{
delete[]n;
}
void mySet::add(int temp) {
bool flag = true;
for (int i = 0; i < size; i++)
{
if (temp == n[i])
{
cout << "This integer is same as the former." << endl;
flag = false;
break;
}
}
if (flag)
{
n[size] = temp;
size++;
}
}
void mySet::del(int temp) {
bool flag = false;
for (int i = 0; i < size; i++)
{
if (temp == n[i])
{
for (i; i < size; i++) {
n[i] = n[i + 1];
}
size--;
flag = true;
}
}
if (flag == false) {
cout << "Cannot find the integer!";
}
}
mySet& mySet::operator=(const mySet& s) {
size = s.size;
for (int i = 0; i < size; i++)
{
n[i] = s.n[i];
}
return*this;
}
mySet mySet::operator+(const mySet& s) {
mySet S;
S = *this;
for (int i = 0; i < s.size; i++)
{
S.add(s.n[i]);
}
return S;
}
mySet mySet::operator*(const mySet& s) {
mySet S;
for (int i = 0; i < s.size; i++)
{
for (int j = 0; j < size; j++)
{
if (n[j] == s.n[i])
{
S.add(s.n[i]);
}
}
}
return S;
}
mySet& mySet::operator-=(const mySet& s) {
for (int i = 0; i < s.size; i++)
{
for (int j = 0; j < size; j++)
{
if (n[j] == s.n[i])
{
del(s.n[i]);
}
}
}
return*this;
}
ostream& operator<<(ostream& os, mySet s) {
for (int i = 0; i < s.size; i++)
{
os << s.n[i] << ' ';
}
os << endl;
os << s.size << endl;
return os;
}
int main()
{
int a;
cout << "How many integers?" << endl;
cin >> a;
cout << "Input these integers." << endl;
mySet A(a);
int b;
cout << "How many integers?" << endl;
cin >> b;
cout << "Input these integers." << endl;
mySet B(b);
cout << A + B << A * B;
A -= B;
cout << A;
}