C++动态数组详解

一、动态数组概述

动态数组是一种可以动态增加或减少大小的数据结构,它可以根据需要实时改变数组大小。动态数组可以在程序运行时根据需求分配内存,相比于静态数组,这样可以更好的控制内存的使用,同时可以减少浪费。

二、动态数组实现原理

实现一个动态数组需要维护一个指针,指向当前动态数组中的内存块。当数组需要扩容时,程序需要申请一个更大的内存块,将原有元素复制到新的内存块中,这时可以将原有内存块删除,并将指针指向新的内存块。在缩小数组大小时,同样需要按照类似的方式操作。

三、动态数组的优缺点

优点:

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/n/332278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TZJINTZJIN
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相关推荐

  • QML 动态加载实践

    探讨 QML 框架下动态加载实现的方法和技巧。 一、实现动态加载的方法 QML 支持从 JavaScript 中动态指定需要加载的 QML 组件,并放置到运行时指定的位置。这种技术…

    编程 2025-04-29
  • Python导入数组

    本文将为您详细阐述Python导入数组的方法、优势、适用场景等方面,并附上代码示例。 一、numpy库的使用 numpy是Python中一个强大的数学库,其中提供了非常丰富的数学函…

    编程 2025-04-29
  • Python返回数组:一次性搞定多种数据类型

    Python是一种多用途的高级编程语言,具有高效性和易读性的特点,因此被广泛应用于数据科学、机器学习、Web开发、游戏开发等各个领域。其中,Python返回数组也是一项非常强大的功…

    编程 2025-04-29
  • Python去掉数组的中括号

    在Python中,被中括号包裹的数据结构是列表,列表是Python中非常常见的数据类型之一。但是,有些时候我们需要将列表展开成一维的数组,并且去掉中括号。本文将为大家详细介绍如何用…

    编程 2025-04-29
  • Python操作数组

    本文将从多个方面详细介绍如何使用Python操作5个数组成的列表。 一、数组的定义 数组是一种用于存储相同类型数据的数据结构。Python中的数组是通过列表来实现的,列表中可以存放…

    编程 2025-04-29
  • Python爱心代码动态

    本文将从多个方面详细阐述Python爱心代码动态,包括实现基本原理、应用场景、代码示例等。 一、实现基本原理 Python爱心代码动态使用turtle模块实现。在绘制一个心形的基础…

    编程 2025-04-29
  • Python二维数组对齐输出

    本文将从多个方面详细阐述Python二维数组对齐输出的方法与技巧。 一、格式化输出 Python中提供了格式化输出的方法,可以对输出的字符串进行格式化处理。 names = [‘A…

    编程 2025-04-29
  • Java创建一个有10万个元素的数组

    本文将从以下方面对Java创建一个有10万个元素的数组进行详细阐述: 一、基本介绍 Java是一种面向对象的编程语言,其强大的数组功能可以支持创建大规模的多维数组以及各种复杂的数据…

    编程 2025-04-28
  • Python数组随机分组用法介绍

    Python数组随机分组是一个在数据分析与处理中常用的技术,它可以将一个大的数据集分成若干组,以便于进行处理和分析。本文将从多个方面对Python数组随机分组进行详细的阐述,包括使…

    编程 2025-04-28
  • Python数组索引位置用法介绍

    Python是一门多用途的编程语言,它有着非常强大的数据处理能力。数组是其中一个非常重要的数据类型之一。Python支持多种方式来操作数组的索引位置,我们可以从以下几个方面对Pyt…

    编程 2025-04-28

发表回复

登录后才能评论