一、動態數組概述
動態數組是一種可以動態增加或減少大小的數據結構,它可以根據需要實時改變數組大小。動態數組可以在程序運行時根據需求分配內存,相比於靜態數組,這樣可以更好的控制內存的使用,同時可以減少浪費。
二、動態數組實現原理
實現一個動態數組需要維護一個指針,指向當前動態數組中的內存塊。當數組需要擴容時,程序需要申請一個更大的內存塊,將原有元素複製到新的內存塊中,這時可以將原有內存塊刪除,並將指針指向新的內存塊。在縮小數組大小時,同樣需要按照類似的方式操作。
三、動態數組的優缺點
優點:
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-tw/n/332278.html
微信掃一掃
支付寶掃一掃