学过C++的人都知道数组是个好东西。 数组是具有一定顺序关系的对象的集合。 当我们考虑存储和处理大量相同类型的数据时 -
既然两位女神都同意使用了,那我们就得自己安排一下了。
整理完之后,看看下面的代码片段,看看是不是你的日常:
俗话说,写一个bug需要3分钟,调试需要3个小时。 这些蜜虫的出现确实让我们新手摸不着头脑。
毕竟,出现这些错误是因为在定义数组时,必须指定其大小。 数组的大小一旦确定,就不能随意向数组中添加元素。 因此,特别容易出现下标越界的问题。 另外,我们不能将一个数组的内容复制到其他数组作为初始值,或者给其他数组赋值。
为了克服数组的这些缺点,C++标准库提供了封装的动态数组。 可以存储任何类型的数据,并且容量可以自动扩展。 堪称数组的专业版! 接下来我们就来学习一下类型的使用吧!
添加头文件
步骤0
结构
步骤1
它是一个类模板。 定义类时,类模板会提取一些类型信息并用模板参数替换,从而使类更加通用。
定义动态数组的形式为:
数组对象名称(数组长度)
我们以int类型为例,看一些构造的例子。
添加和删除元素
第2步
最基本的内存模型是栈结构,后进先出,可以通过下面的手绘图直观的表示出来⬇️
具体代码实现如下。
获取长度
步骤3
经过一系列的pop和push操作之后,现在处于什么状态呢? 我们可以调用size()函数来获取向量中元素的函数,并调用empty()函数来检查向量是否为空。
通过下标访问元素
步骤4
对于向量c,我们可以使用c.at(index)访问它的元素,其中index是元素的下标。
使用迭代器
步骤5
()是一种数据类型,用于遍历容器中的所有元素。 它的定义如下:
::
(定义一个T类型的迭代器)
说白了,迭代器就是“智能”指针的封装版本。 关于迭代器的使用,我们来看几个例子。
我们还可以使用迭代器在特定位置插入和删除元素。 这两个操作分别对应擦除功能。 具体用法如下。
清除所有数据
步骤6
对于向量c,只需调用c.clear()即可清除c中的所有数据~
这个怎么样? 看了这么多介绍,你觉得超级无敌好用吗? 最后我们总结一下数组的pro版本相比数组有哪些改进。
尺寸可以改变吗?
它是变长容器,即容器容量可以根据数据的插入和删除而重新构建,但数组和数组具有定长容量。
初始化
数组不能将数组的内容复制到其他数组作为初始值,也不能使用数组给其他数组赋值,但向量可以。
提供更好的数据访问机制,即可以使用AT访问方式,使得访问更加安全。 数组只能通过下标来访问,这在程序设计时更容易造成访问错误。
提供了获取大小和null判断的机制,而数组只能通过遍历或者通过附加变量来记录数组的大小。
提供了一种可以动态插入和删除元素的机制,但是数组和数组做不到这一点,或者如果数组和数组需要完成这个功能,就需要自己实现。
深度搜索:内存中的位置
C++ 中的数组是内置数据类型,存储在堆栈中。 内存的分配和释放完全由系统自动完成; 数组存储在堆中,STL库中的程序负责内存分配和释放。 它很容易使用。
Pro版本比其他版本都好,唯一的缺点是它贵一点(无可辩驳的事实)。 享受便利需要付出昂贵的时间。 执行效率比数组低很多,主要是扩容过程消耗大量时间。 那么什么时候该用,什么时候该用数组,还是要具体问题具体分析。