一、動態數組概述
動態數組是一種可以動態增加或減少大小的數據結構,它可以根據需要實時改變數組大小。動態數組可以在程序運行時根據需求分配內存,相比於靜態數組,這樣可以更好的控制內存的使用,同時可以減少浪費。
二、動態數組實現原理
實現一個動態數組需要維護一個指針,指向當前動態數組中的內存塊。當數組需要擴容時,程序需要申請一個更大的內存塊,將原有元素複製到新的內存塊中,這時可以將原有內存塊刪除,並將指針指向新的內存塊。在縮小數組大小時,同樣需要按照類似的方式操作。
三、動態數組的優缺點
優點:
1、動態數組可以根據需要實時改變數組大小,可以更好的控制內存的使用。
2、相比於靜態數組,動態數組可以減少浪費。
缺點:
1、動態數組需要額外的內存儲存指針,由於動態數組的增長通常是指數級別的,因此會產生較大的內存開銷。
2、由於動態數組的內存分配不是連續的存儲空間,因此數組元素的訪問效率不如靜態數組高。
四、動態數組實現代碼
#include <iostream> using namespace std; class DynamicArray { private: int *pData;//指向動態數組的指針 int m_size;//動態數組的大小 int m_nLength;//動態數組的長度 public: DynamicArray(int size) { m_size = size; m_nLength = 0; pData = new int[m_size]; } ~DynamicArray(void) { delete[] pData; } void ReSize(int newSize) { int *pNewData = new int[newSize]; memcpy(pNewData, pData, sizeof(int) * m_nLength); delete[] pData; pData = pNewData; m_size = newSize; } void Add(int element) { if (m_nLength == m_size) { ReSize(m_size * 2); } pData[m_nLength++] = element; } void RemoveAt(int nIndex) { if (nIndex >= m_nLength || nIndex < 0) { return; } for (int i = nIndex; i < m_nLength - 1; i++) { pData[i] = pData[i + 1]; } m_nLength--; if (m_nLength < m_size / 2) { ReSize(m_size / 2); } } };
五、動態數組的使用示例
我們可以使用上述的動態數組代碼進行測試。
int main() { DynamicArray arr(10); arr.Add(1); arr.Add(2); arr.Add(3); arr.Add(4); arr.Add(5); arr.Add(6); arr.RemoveAt(3); for (int i = 0; i < arr.GetSize(); i++) { cout << arr[i] << " "; } return 0; }
六、小結
本文詳細介紹了C++動態數組的概念、實現原理、優缺點以及代碼實現。動態數組是一個非常實用的數據結構,可以幫助我們更好的控制內存的使用,管理數據。使用動態數組時,需要注意動態數組的內存開銷和訪問效率。
原創文章,作者:TZJIN,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/332278.html