亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++簡單集合類的實現方法

2020-05-23 14:01:57
字體:
來源:轉載
供稿:網友

來自于C++程序設計的一個題目。實現一個集合類,要求實現以下4個操作。
 1.向集合中添加元素,如果集合中已存在元素則不添加
 2.從集合中移除元素,移除之前需要先判斷集合中元素是否存在
 3.重載+運算符,用以實現集合的求并集運算
 4.重載*運算符,用以實現集合的求交集運算 

1.類的整體設計
該問題需要模擬實現集合類,我們可以使用數組來模擬集合,于是使用int items[100]用來存放集合中的數據。為了實現數組的遍歷,這就需要一個整數用來表示數組中元素的個數,于是使用int number來表示數組中元素的個數;此外,為了實現題目的需求,設計以下四個函數:
 1).使用add_item(int item)成員函數向數組中添加元素
 2).使用remove_item(int item)成員函數向數組中移除元素
 3).重載operator+表示集合的求并集運算
 4).重載operator*表示集合的求交集運算
由于向集合添加元素之前,必須確保集合中不存在該元素;在從集合中移除元素之前,必須確保集合中存在該元素,因此添加is_exist(int item)方法用以判斷集合中是否存在這個元素;此外為了顯示集合,添加display()方法, 基本設計如下:

 class Set{public:  int items[100]; //定義一個數組作為容器存放100個集合元素  int number; //定義數字i表示集合中元素的個數  //構造函數和析構函數  Set() {    this->number = 0;    memset(this->items,0,sizeof(items));  }  //初始化方法  int init(int items[], int num);  //添加元素  bool add_item(int item);  //刪除元素  bool remove_item(int item);  //求集合的并集  Set operator+ (Set set2);  //求集合的交集  Set operator* (Set set2);  //顯示集合元素  int display();  //判斷集合當中是否存在item,返回元素在集合中的位置,不存在返回-1  int is_exist(int item);}; 

2.構造函數

 Set() {  this->number = 0;  memset(this->items,0,sizeof(items));} 

在構造函數中,我們對數組進行初始化,聲明完數組之后,如果不進行初始化,數組元素是隨機值,在C語言中,變量不進行初始化都會被分配隨機值。為了避免這種情況,我們使用memset函數對數組items所有元素全部賦值為0;同時,由于此時數組中沒有元素,即元素個數為0,我們的number也應當賦值為0. 

3.判斷數組中是否包含元素 item

 int Set::is_exist(int item){  for(int i=0; i< this->number; i++) {    if(this->items[i] == item) {      return i;    }  }  return -1;} 

該函數用于判斷數組中是否存在item元素,如果存在就返回item元素的位置,如果不存在就返回-1. 判斷方法非常簡單,寫一個for循環從items[0]-items[number-1]一個一個進行遍歷。如果相等,直接返回i,此時i就是數組中item元素的位置;如果遍歷完整個數組之后,都沒有發現與item相等的數組元素,說明數組中不存在item這個元素,于是返回-1. 

4.向數組中添加元素

 bool Set::add_item(int item){  if(is_exist(item) >= 0 || this->number >= 100) {    return false;  }  this->items[this->number] = item;  this->number++;  return true;} 

首先判斷數組中是否存在該元素,如果存在則不能再向集合中添加元素,直接返回false,如果不存在,則向數組中的number所指向的那個位置添加該元素,然后number作為數組元素個數的指示器+1,這樣就完成了添加元素。 

5.保護數組元素不被修改
寫到這里,我們發現,數組元素個數指示器this->number,對于該問題的幾個算法都起到了核心的作用,首先,我們依賴于數組元素個數指示器遍歷數組,如果number值遭到修改,會導致無法遍歷數組。舉個例子來說,當我們調用下列語句以后:

 Set set1;set1.add_item(1);set1.add_item(2);set1.add_item(3); 

集合set1中的數組items變為[1,2,3],數組元素個數指示器number=3,此時,如果我們還想向集合set1中添加元素20,我們需要利用number=3這個指示器,讓set1.items[number]=20,并且讓number+1以指向下一個位置,即number=4。但是如果用戶手動修改number值,比如set1.number=50;此時,我們的number就不再能指示數組元素的正確位置,從而導致以上所有算法所依賴的number失效,因此,我們需要對數組本身,以及數組元素個數指示器number進行私有化,以避免用戶隨意篡改。于是:

 class Set{public:  //構造函數和析構函數  Set() {    this->number = 0;    memset(this->items,0,sizeof(items));  }  //初始化方法  int init(int items[], int num);  //添加元素  bool add_item(int item);  //刪除元素  int remove_item(int item);  //求集合的并集  Set operator+ (Set set2);  //求集合的交集  Set operator* (Set set2);  //顯示集合元素  int display();  //判斷集合當中是否存在item,返回元素在集合中的位置,不存在返回-1  int is_exist(int item);private:  int items[100]; //定義一個數組作為容器存放100個集合元素  int number; //定義數字i表示集合中元素的個數}; 

6. 從集合中移除元素

 bool Set::remove_item(int item){  int pos = is_exist(item);  if(pos == -1) return false;  for(int i=pos; i< this->number-1; i++) {    this->items[i] = this->items[i+1];  }  this->number--;  return true;} 

首先檢查要移除的元素在結合中是否存在,如果不存在,則直接返回false;其次,定位到集合中元素的位置,然后從這個位置開始將集合中剩余的元素逐個前移,最后集合元素指示器-1,并返回true.

7. 求兩個集合的交集

 Set Set::operator* (Set set2){  Set result;  for(int i=0; i< this->number; i++) {    if(set2.is_exist(this->items[i]) >= 0) {      result.items[result.number] = this->items[i];      result.number++;    }  }  return result;} 

算法很簡單,遍歷集合A中的元素,對于A中的每一個元素判斷在集合B中是否存在,如果存在就加入到集合C當中,最后返回集合C

8. 求兩個集合的并集

 Set Set::operator+ (Set set2){  Set result;  for(int i=0; i<this->number; i++) {    result.items[result.number] = this->items[i];    result.number++;  }  for(int j=0; j<set2.number; j++) {    if(result.is_exist(set2.items[j]) == -1) {      result.items[result.number] = set2.items[j];      result.number++;    }  }  return result;} 

首先遍歷集合A,將集合A中的元素全部加到集合C當中,然后遍歷集合B,對于B中的每一個元素,首先判斷是否在A中存在,如果不存在則將其加入到集合C中,最終返回集合C

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品无码专区在线观看| 色青青草原桃花久久综合| 久久久久久久久久久久久久久久久久av| 亚洲国产精品电影| 92国产精品视频| 成人精品aaaa网站| 性亚洲最疯狂xxxx高清| 狠狠久久五月精品中文字幕| 国产v综合v亚洲欧美久久| 精品久久久久久久久久国产| 色偷偷88888欧美精品久久久| 国产高清视频一区三区| 中文字幕亚洲一区二区三区| 91中文字幕在线观看| 91黑丝高跟在线| 欧美性xxxx在线播放| 国产亚洲欧美一区| 日韩激情av在线免费观看| 亚洲成年人在线| 91热精品视频| 久久国产精品久久精品| 欧美日韩精品国产| 欧美日韩在线一区| 91精品久久久久久久久久久| 国内精品视频在线| 亚洲免费人成在线视频观看| 国产视频观看一区| 国产欧美日韩视频| 欧美激情在线有限公司| 国产精品久久久久久久久久ktv| 国产精品香蕉在线观看| 日本欧美黄网站| 欧美精品在线播放| 亚洲视频电影图片偷拍一区| 美女扒开尿口让男人操亚洲视频网站| 国产精品高清免费在线观看| 国产精品欧美一区二区三区奶水| 亚洲美女喷白浆| 91久久精品久久国产性色也91| 日本一区二区不卡| 91经典在线视频| 色久欧美在线视频观看| 欧美黄色成人网| 亚洲欧美日韩第一区| 98午夜经典影视| 亚洲国产精品久久久久久| 亚洲免费视频一区二区| 九九热最新视频//这里只有精品| 亚洲成色www8888| 日韩av黄色在线观看| 欧美午夜精品在线| 亚洲人午夜精品免费| 久久久久久国产精品三级玉女聊斋| 青青久久av北条麻妃海外网| 亚洲视频在线观看视频| 亚洲人成网站在线播| 一区二区三欧美| 亚洲电影在线观看| 欧美日韩国产一区二区三区| 欧美老肥婆性猛交视频| 亚洲va欧美va国产综合久久| 久久亚洲精品国产亚洲老地址| 亚洲精品丝袜日韩| 日韩欧美在线观看视频| 亚洲国产小视频在线观看| 国产精品a久久久久久| 91最新国产视频| 国产精品三级久久久久久电影| 懂色av中文一区二区三区天美| 国产丝袜精品第一页| 精品久久中文字幕久久av| 青青草一区二区| 欧美大荫蒂xxx| 亚洲精品99久久久久| 久久久av电影| 91九色蝌蚪国产| 欧美日韩午夜视频在线观看| 亚洲国产精品字幕| 亚洲免费中文字幕| 国产午夜精品麻豆| 亚洲片在线资源| 中文字幕自拍vr一区二区三区| 国内精品久久久久影院优| 不卡伊人av在线播放| 欧美一区二区.| 久久久综合免费视频| 九九精品视频在线| 亚洲欧美制服丝袜| 亚洲国产精品成人av| 国产精品久久99久久| 成人欧美在线观看| 欧美色欧美亚洲高清在线视频| 国产精品一区二区电影| 亚洲国产女人aaa毛片在线| 国产精品美乳在线观看| 亚洲韩国日本中文字幕| 日韩黄色在线免费观看| 91色精品视频在线| 欧亚精品在线观看| www.亚洲男人天堂| 萌白酱国产一区二区| 欧美日韩性生活视频| 亚洲成人网在线| 久久久久久久久久国产| 成人欧美一区二区三区黑人| 亚洲天堂免费观看| 精品国产一区二区三区久久狼5月| 欧美性猛交xxxx免费看漫画| 一区二区三区无码高清视频| 国产精品69精品一区二区三区| 国产成人精品免高潮费视频| 色偷偷综合社区| 国内精品久久久久| 日韩欧美亚洲成人| 亚洲国产精品久久久久久| 亚洲高清在线观看| 国产主播欧美精品| 日韩成人在线网站| 国产69精品99久久久久久宅男| 国产做受高潮69| 性欧美在线看片a免费观看| 成人黄色av播放免费| 热久久免费视频精品| www.久久久久久.com| 日韩精品在线免费观看视频| 日韩成人在线免费观看| 一本一本久久a久久精品综合小说| 丝袜美腿亚洲一区二区| 久久久久久亚洲精品中文字幕| 在线观看精品自拍私拍| 欧美激情精品久久久久久大尺度| 欧美在线免费看| 欧美性猛交xxxx乱大交3| 2020久久国产精品| 精品激情国产视频| 国产91色在线播放| 国产视频久久久久| 日韩成人av在线播放| 亚洲视频网站在线观看| 亚洲欧洲美洲在线综合| 精品久久中文字幕久久av| 日韩h在线观看| 日日噜噜噜夜夜爽亚洲精品| 久久国产精品偷| 国产精品一区二区3区| 亚洲最新av在线网站| 2019日本中文字幕| 国产精品福利在线观看网址| 亚洲影影院av| 日韩美女视频免费在线观看| 97久久精品国产| 亚洲影院色在线观看免费| 中文字幕视频在线免费欧美日韩综合在线看| 欧美日韩免费观看中文| 91久久国产精品91久久性色| 日韩欧美a级成人黄色| 国产午夜精品一区理论片飘花| 欧美成人免费全部| 国产v综合ⅴ日韩v欧美大片| 色综合久综合久久综合久鬼88| 欧美日韩中文在线| 国产精品电影一区| 日本一区二区在线播放| 精品国内亚洲在观看18黄|