1. 程式人生 > 其它 >【C++】2、集合

【C++】2、集合

技術標籤:# 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;
}

在這裡插入圖片描述