C/C++编程知识分享:C++ 手把手教你实现可变长的数组
01 實現自定義的可變長數組類型
假設我們要實現一個會自動擴展的數組,要實現什么函數呢?先從下面的main函數給出的實現,看看有什么函數是需要我們實現的。
輸出結果:
要實現的方式,要做哪些事情呢?我先列一下:
(1)要用動態分配的內存來存放數組元素,需要一個指針成員變量
(2)重載賦值=運算符
(3)重載[]運算符
(4)重載復制構造函數
(5)實現push_back和length()函數
02 MyArray類的實現步驟
要實現一個可變長數組類的,基本需要實現下面的7個函數:
1. 構造函數
構造函數的目的就是初始化一個數組,代碼如下:
2. 復制構造函數
復制構造函數目的就是產生一個與入參對象一樣的對象,但是由于MyArray類是有指針成員變量的,所以我們必須才用深拷貝的方式來實現復制構造函數,如果使用默認的復制構造函數,則會導致兩個對象的指針成員變量指向的地址是同一個,這是非常危險的。
3. 析構函數
析構函數的目的就是釋放數組的資源。
4. 重載賦值=運算符函數
重載賦值=運算符函數目的就使=號左邊對象里存放的數組,大小和內容都和右邊的對象一樣。
5. 重載[]運算符函數
重載[]運算符函數目的就是能通過[]運算符來獲取對應下標的數組值。
.6. 加入元素到數組末尾的函數
push_back函數的目的就是把一個新的元素,加入到數組的末尾。
7. 獲取數組長度的函數
length()函數就比較簡單了,直接返回成員變量m_size,就是數組的長度了。
03 小結
可變長數組類型實現的整體代碼,如下:
實際上本次的可變長的數組類還缺少一下函數,比如:刪除某個元素的函數、清空數組的函數等等,這些可以留給大家思考。
還有就是 push_back 函數還有優化的空間,當前的 push_back 函數每加入一個元素都會重新分配新的內存,這是會增大開銷的,那么優化的思路:
提前分配好一個 n 大小的空間,當數組大小不夠的時候,則才繼續重新分配 2n 大小的空間,以此類推。
博客園:小林coding
學習C/C++編程,提升C++編程能力,歡迎關注博主的微信公眾號:C語言編程學習基地,一起來學習進步吧!
總結
以上是生活随笔為你收集整理的C/C++编程知识分享:C++ 手把手教你实现可变长的数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下mysql远程登陆
- 下一篇: 大厂机密!30 个提升团队研发效能的锦囊