【C++】2、集合
阿新 • • 發佈:2021-02-05
技術標籤:# C++大作業
定義並實現一個整數集合類int_set,集合類中cur_size表明當前集合中有幾個整數,集合中最多含max_size個整數,存放集合元素的陣列是動態的。要求提供的方法有:
(1) 增加一個整數到集合中;
(2)從集合中去掉一個元素;
(3)判斷一個元素是否在集合中;
(4)過載<<運演算法,輸入集合;過載>>運算子輸出集合;
(5)分別實現集合的交、並、差運算。
int_set.h :
#pragma once
class int_set
{
private:
int cur_size;//實際長度
int max_size;//最大長度
int* num;
public:
int_set(int initialCapacity = 10);
~int_set();
bool empty()const;
int size()const;
bool contain(int element)const;
void add(int element);
void remove(int element);
void output()const;
};
int_set.cpp :
#include "int_set.h"
#include<iostream>
using namespace std;
int_set::int_set(int initialCapacity)
{
if (initialCapacity < 1) {
throw"集合長度要大於0\n";
}
max_size = initialCapacity;
num = new int[max_size];
cur_size = 0;
}
int_set::~int_set()
{
delete[]num;
}
bool int_set::empty() const
{
return cur_size == 0;
}
int int_set::size() const
{
return cur_size;
}
bool int_set::contain(int element) const
{
for (int i = 0;i < cur_size;i++) {
if (*(num + i) == element) {
return true;
}
}
return false;
}
void int_set::add(int element)
{
if (cur_size == max_size) {
throw"集合已滿\n";
}
if (contain(element)) {
throw "集合已存在元素\n";
}
*(num + cur_size) = element;
cur_size++;
}
void int_set::remove(int element)
{
if (empty()) {
throw"集合為空\n";
}
if (!contain(element)) {
throw"該集合不存在該元素\n";
}
int* p = new int[max_size],n=0;
for (int i = 0;i < cur_size;i++) {
if (*(num + i) != element) {
*(p+n) = *(num + i);
n++;
}
}
delete[]num;
cur_size--;
num = p;
}
void int_set::output() const
{
for (int i = 0;i < cur_size;i++) {
cout << *(num + i)<<" ";
}
}
/*
有參建構函式初始化時,要保證最大長度大於0;
新增元素時,判斷集合是否滿
集合是否存在該元素
刪除元素時,判讀集合是否為空
集合是否不存在該元素
*/
Test.cpp :
#include<iostream>
using namespace std;
#include"int_set.h"
int main()
{
try {
int_set set1(-2);
}
catch ( const char* msg) {
cout << msg;
}
int_set set(5);
set.add(1);
set.add(3);
set.add(5);
set.add(7);
try {
set.add(5);
}
catch (const char* msg) {
cout << msg;
}
set.add(9);
try {
set.add(11);
}
catch (const char* msg) {
cout << msg;
}
//刪除操作
try {
set.remove(23);
}
catch (const char* msg) {
cout << msg;
}
set.output();
cout << "\n";
set.remove(1);
set.remove(3);
set.remove(5);
set.remove(7);
set.remove(9);
try {
set.remove(5);
}
catch (const char* msg) {
cout << msg;
}
/*
理論上每一個add()、remove()都要用try、catch
這裡我為了簡便,只有異常情況使用了
*/
return 0;
}