www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 小林coding
[導讀]—?1?— 要實現(xiàn)什么函數(shù)呢? 假設我們要實現(xiàn)一個會自動擴展的數(shù)組類,我們需要實現(xiàn)函數(shù)呢?先從下面 main?函數(shù)使用的功能,看看有什么函數(shù)是需要我們實現(xiàn)的。 輸出結果: 0 1 2 3 40 1 2 100 4 要實現(xiàn)如上的功能,要做哪些事情呢?先列出來: 要用動態(tài)分配的內(nèi)


 1 

要實現(xiàn)什么函數(shù)呢?


假設我要實現(xiàn)一個會自動擴展的數(shù)組類,我們需要實現(xiàn)函數(shù)呢?先從下main 函數(shù)使用的功能,看看有什么函數(shù)是需要我們實現(xiàn)的。



輸出結果:


0 1 2 3 40 1 2 100 4


要實現(xiàn)如上的功能,要做哪些事情呢?先列出來:

  • 要用動態(tài)分配的內(nèi)存的方式,來存放數(shù)組元素,且需要一個指針成員變量

  • 重載賦值 = 運算符

  • 重載括號 [] 運算符

  • 重載復制構造函數(shù)

  • 實現(xiàn) push_backlength 函數(shù)





 2 

實現(xiàn)的步驟

要實現(xiàn)一個可變長的數(shù)組類,基本要需要實現(xiàn)下面的 7 個函數(shù):



— —

01 構造函數(shù)

構造函數(shù)的目的就是初始化一個數(shù)組,代碼如下:


// 構造函數(shù)MyArray::MyArray(int s = 0):m_size(s){ // 當初始化長度為0的數(shù)組時,數(shù)組指針就是空的 if(s == 0) m_ptr = NULL; // 當初始化長度不為0時,則申請對應大小的空間 else m_ptr = new int[s];}


— —


02 復制構造函數(shù)

復制構造函數(shù)目的就是產(chǎn)生一個與入?yún)ο笠粯拥膶ο?,但是由?MyArray 類是有指針成員變量的,所以我們必須用深拷貝的方式來實現(xiàn)復制構造函數(shù),如果使用默認的復制構造函數(shù),則會導致兩個對象的指針成員變量指向的地址是同一個,這是非常危險的。


// 復制構造函數(shù)MyArray::MyArray(const MyArray &a){ // 如果入?yún)⒌臄?shù)組對象的指針地址為空時, // 則也初始化一個空的數(shù)組 if(a.m_ptr == NULL) { m_ptr = NULL; m_size = 0; } // 如果入?yún)⒌臄?shù)組對象有數(shù)據(jù)時,則申請一個新的地址, // 最后來復制入?yún)ο髷?shù)組對象的數(shù)據(jù)和大小。 else { m_ptr = new int[a.m_size]; memcpy(m_ptr, a.m_ptr, sizeof(int)*a.m_size); m_size = a.m_size; }}


— —


03 析構函數(shù)

析構函數(shù)的目的就是釋放數(shù)組的資源,代碼如下:


// 析構函數(shù)MyArray::~MyArray(){ // 如果指針地址不為空時,則釋放資源 if(m_ptr) delete [] m_ptr;}


— —


04 重載賦值 = 運算符函數(shù)

重載賦值 = 運算符函數(shù)目的就是 = 號左邊對象里存放的數(shù)組,大小和內(nèi)容都和右邊的對象一樣,代碼如下:


// 重載賦值 = 運算符函數(shù)MyArray & MyArray::operator=(const MyArray & a){ if(m_ptr == a.m_ptr) // 防止a=a這樣的賦值導致出錯 return *this;   if(a.m_ptr == NULL) // 如果a里面的數(shù)組是空的 { if(m_ptr) delete [] m_ptr; // 釋放舊數(shù)組的資源  m_ptr = NULL; m_size = 0; return *this; }  // 如果原有空間足夠大,就不用分配新的空間 if(m_size < a.m_size)用分配新的空間 { if(m_ptr) delete [] m_ptr; // 釋放舊數(shù)組的資源  m_ptr = new int[a.m_size]; // 申請新的內(nèi)存地址 }  // 拷貝內(nèi)容 memcpy(m_ptr, a.m_ptr, sizeof(int)*a.m_size); m_size = a.m_size; return *this;}


— —


05 重載 [] 運算符函數(shù)

重載 [] 運算符函數(shù)目的就是能通過 [] 運算符來獲取對應下標的數(shù)組值,代碼如下:


// 重載[]運算符函數(shù)int & MyArray::operator[](int i){ return m_ptr[i]; // 返回對應下標的數(shù)組值}


— —


06 加入元素到數(shù)組末尾的函數(shù)

push_back 函數(shù)的目的就是把一個新的元素,加入到數(shù)組的末尾,代碼如下:

// 在數(shù)組尾部添加一個元素void MyArray::push_back(int v){ if(m_ptr) // 如果數(shù)組不為空 { // 重新分配空間 int *tmpPtr = new int[m_size + 1];   // 拷貝原數(shù)組內(nèi)容 memcpy(tmpPtr, m_ptr, sizeof(int)*m_size);  delect [] m_ptr; m_ptr = tmpPtr; } else // 如果數(shù)組本來就是空的 { m_ptr = new int[1];  }  m_ptr[m_size++] = v; //加入新的數(shù)組元素}


— —


07 獲取數(shù)組長度的函數(shù)

length 函數(shù)就比較簡單了,直接返回成員變量 m_size ,就是數(shù)組的長度了,代碼如下:

// 獲取數(shù)組長度的函數(shù)int MyArray:;length(){ return m_size;}






 04 

再改進下?


push_back 函數(shù)還有優(yōu)化的空間,當前的 push_back 函數(shù)每加入一個元素都會重新分配新的內(nèi)存,這是會增大開銷的。

那么優(yōu)化的思路: 提前分配好一個 n 大小的空間,當數(shù)組大小不夠的時候,則才繼續(xù)重新分配 2n 大小的空間,以此類推。

我們需要新增兩個成員變量:  
 int m_cout; // 數(shù)組元素的個數(shù) int m_newNum; // 擴容的次數(shù)

改進后的  push_back  函數(shù),代碼如下:





 5 

小結

最后, 總體的代碼如下:




推薦閱讀:
C++ 運算符重載的基本概念
C++ 賦值運算符'='的重載(淺拷貝、深拷貝)


  小林coding  




你的贊,很重要呀

免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉