我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++怎么实现动态数组

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++怎么实现动态数组

本篇内容介绍了“C++怎么实现动态数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

动态数组

动态数组Vector可以动态扩展内存,其采用连续的内存空间,当内存空间不足,便以原来的容量的2倍或者1.5倍成倍的扩展,将原有的数组元素拷贝到新分配的内存空间中,释放原有的内存空间,新的元素将存入的新分配的内存空间。

示例代码

动态数组vector的size函数和capacity函数,分别作为求数组中现有的元素的个数和数组所能容纳的元素的个数。下面直接上实现的代码。

DynamicArray .h

#pragma onceclass DynamicArray {public:DynamicArray();~DynamicArray();void push_back_Array(int value);void insertValueByPosArray(size_t pos,int value);void removeByValueFromArray(int value);void removeByPosFromArray(size_t pos);int findPosByValueArray(int value);int findValueByPosArray(size_t pos);void reclaimSpaceArray();void clearArray();int getCapacity();int getCount();void printArray();private:int *m_pArr;size_t m_size;size_t m_capacity;};

DynamicArray .cpp

#include "DynamicArray.h"#include <iostream>using namespace std;// DynamicArray.cpp DynamicArray::DynamicArray(){m_size = 0;m_capacity = 20;m_pArr = new int[m_capacity];if (m_pArr == nullptr){cout << "new 开辟空间失败" << endl;}}DynamicArray::~DynamicArray(){if (m_pArr != nullptr) {delete[] m_pArr;m_pArr = nullptr;}m_size = 0;m_capacity = 0;}void DynamicArray::push_back_Array(int value)//push_back{if (m_pArr == nullptr){return;}reclaimSpaceArray();m_pArr[m_size] = value;m_size++;}void DynamicArray::insertValueByPosArray(size_t pos, int value)//插入insert(可以在前,中,后插入){if (m_pArr == nullptr){return;}reclaimSpaceArray();for (size_t i = m_size - 1; i >= pos; --i)//pos为下标的数,从0开始{m_pArr[i + 1] = m_pArr[i];}m_pArr[pos] = value;m_size++;}void DynamicArray::removeByValueFromArray(int value){if (m_pArr == nullptr){return;}int nPos = findPosByValueArray(value);removeByPosFromArray(nPos);}void DynamicArray::removeByPosFromArray(size_t pos)//pos为下标的数,从0开始{if (m_pArr == nullptr){return ;}if (pos < 0 || pos >= m_size)//pos的最大值为m_size-1{return ;}//找到被删除位置的下一位for (size_t i = pos + 1; i < m_size; ++i){m_pArr[i - 1] = m_pArr[i];}m_size--;}int DynamicArray::findPosByValueArray(int value){size_t nPos = -1;if (m_pArr == nullptr){return nPos;}for (size_t i = 0; i < m_size; ++i){if (m_pArr[i] == value){nPos = i;break;}}return nPos;}int DynamicArray::findValueByPosArray(size_t pos){if (m_pArr == nullptr){return -1;}if (pos < 0 || pos >= m_size){return -1;}return m_pArr[pos];}void DynamicArray::reclaimSpaceArray(){if (m_size == m_capacity){int *newArr = new int[m_capacity * 2];if (newArr == nullptr){cout << "new 开辟空间失败" << endl;return;}memset(newArr, 0, m_capacity * 2 * sizeof(int));//第三个参数为字节数memcpy(newArr, m_pArr, m_size * sizeof(int));//第三个参数为字节数//下面这种逐个赋值的方式也可以使用//for (size_t i = 0; i < m_capacity; i++)//{//newArr[i] = m_pArr[i];//}m_capacity = m_capacity * 2;if (m_pArr) {delete[] m_pArr;m_pArr = nullptr;}m_pArr = newArr;}}void DynamicArray::clearArray()//vector中clear()只是改变size的大小{m_size = 0;}int DynamicArray::getCapacity(){return m_capacity;}int DynamicArray::getCount(){return m_size;}void DynamicArray::printArray(){for (size_t i = 0; i < m_size; ++i){//下面两种方式打印都可以cout << m_pArr[i] << " ";//int ret = findValueByPosArray(i);//cout<< ret<< " ";}cout << endl;}

main.cpp

#include <iostream>#include "DynamicArray.h"using namespace std;void test() {DynamicArray * pArray = new DynamicArray;int i = 0;while (i++ < 11) {pArray->push_back_Array(i);}pArray->printArray();cout <<"size= "<< pArray->getCount() << endl;cout << "容量: " << pArray->getCapacity() << endl;pArray->insertValueByPosArray(5,12);pArray->printArray();cout << "insert after size= " << pArray->getCount() << endl;cout << "insert after 容量: " << pArray->getCapacity() << endl;pArray->removeByValueFromArray(2);pArray->printArray();cout << "remove after size= " << pArray->getCount() << endl;cout << "remove after 容量: " << pArray->getCapacity() << endl;pArray->removeByPosFromArray(3);pArray->printArray();cout << "remove by pos after size= " << pArray->getCount() << endl;cout << "remove by pos after 容量: " << pArray->getCapacity() << endl;cout<<"find 2 of pos: "<<pArray->findPosByValueArray(2)<<endl;cout << "find 8 of pos: " << pArray->findPosByValueArray(8) << endl;cout << "value at pos of 6: " << pArray->findValueByPosArray(6) << endl;pArray->clearArray();cout << "size= " << pArray->getCount() << endl;cout << "容量: " << pArray->getCapacity() << endl;if (pArray){delete pArray;pArray = nullptr;}}int main(){test();return 0;}

运行环境

以上代码的运行环境为:vs2017控制台输出程序。

运行效果

C++怎么实现动态数组

“C++怎么实现动态数组”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++怎么实现动态数组

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++怎么实现动态数组

本篇内容介绍了“C++怎么实现动态数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动态数组动态数组Vector可以动态扩展内存,其采用连续
2023-07-02

C#中怎么实现动态数组

C#中怎么实现动态数组,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.数组的容量是固定的,但ArrayList的容量可以根据需要自动扩充。当我们修改了Arra
2023-06-17

C#中怎么实现一个动态数组

C#中怎么实现一个动态数组,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.数组的容量是固定的,但ArrayList的容量可以根据需要自动扩充。当我们修改了ArrayLis
2023-06-17

C#怎么实现泛型动态循环数组队列

这篇文章主要介绍“C#怎么实现泛型动态循环数组队列”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么实现泛型动态循环数组队列”文章能帮助大家解决问题。任务循环数组实现目标:(1)创建一个新的数组
2023-06-29

使用C语言实现动态数组

动态数组C语言实现方法动态数组是指在程序运行过程中可以根据需要动态地分配和释放内存的一种数据结构。相比于静态数组,动态数组的长度可以在运行时进行动态调整,从而更加灵活地满足程序的需要。在C语言中,动态数组的实现依赖于动态内存分配函数ma
使用C语言实现动态数组
2024-02-25

C#动态数组怎么使用

这篇文章主要讲解了“C#动态数组怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#动态数组怎么使用”吧!下面是用法示例,例子很简单,就不用加注释了。public static str
2023-06-17

JAVA怎么实现PHP的动态数组

JAVA实现PHP的动态数组的方法:1、通过“new HashMap();”方式获取值;2、通过“new HashMap();”方式获取值。
2018-07-18

C#动态创建数组的实现过程

本篇内容主要讲解“C#动态创建数组的实现过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#动态创建数组的实现过程”吧!C#动态创建数组在实际开发中是十分实用的功能实现,那么C#动态创建数组是
2023-06-17

c++中的动态数组怎么用

这篇文章给大家分享的是有关c++中的动态数组怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C++的new操作符是该语言一个非常好的语法特性,然而实际使用中却发现new操作符有不少限制,为突出的一点便是用ne
2023-06-03

Java数组怎么实现动态初始化

这篇文章主要讲解了“Java数组怎么实现动态初始化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java数组怎么实现动态初始化”吧!概念1、数组动态初始化只给定数组长度,系统默认初始化值。2
2023-06-30

c# winform动态更新数据怎么实现

在C# WinForms中实现动态更新数据,可以使用数据绑定和事件处理来实现。使用数据绑定创建一个数据源,例如一个List或DataTable对象,用于存储数据。将数据源绑定到控件,例如DataGridView或ListBox。当数据
2023-10-26

使用VBScript怎么实现一个动态数组

本篇文章为大家展示了使用VBScript怎么实现一个动态数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。动态 Array 实现myArray = Array()For i = 1 To 10 R
2023-06-08

C#中怎么动态创建一个数组

这期内容当中小编将会给大家带来有关C#中怎么动态创建一个数组,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#动态创建数组实例:ArrayList al = new ArrayList(); al.A
2023-06-17

C++中怎么动态分配二维数组

C++中怎么动态分配二维数组,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在C++语言中动态的一维数组是通过malloc动态分配空间来实现的,动态的二维数组也可以通过mallo
2023-06-17

java如何实现动态数组

这篇文章主要介绍了java如何实现动态数组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下数组最大的优点︰快速查询。scores[2]。数组最好应用于“索引有语意”
2023-06-20

React远程动态组件怎么实现

这篇文章主要介绍了React远程动态组件怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React远程动态组件怎么实现文章都会有所收获,下面我们一起来看看吧。远程动态组件实现远程动态组件库远程动态组件库项
2023-07-05

C#中怎么处理动态二维数组函数

这篇文章将为大家详细讲解有关C#中怎么处理动态二维数组函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。对于C#动态二维数组函数处理方案理解我们引入一个例子来看看生活中,有很多事物,仅仅用一
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录