程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++簡略聚集類的完成辦法

C++簡略聚集類的完成辦法

編輯:關於C++

C++簡略聚集類的完成辦法。本站提示廣大學習愛好者:(C++簡略聚集類的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C++簡略聚集類的完成辦法正文


來自於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

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved