全网营销的四大优势/百度官方优化软件


学过C++的同学都知道,数组是个好东西。数组是具有一定顺序关系的若干对象的集合体,当我们想到存储和处理大量同类型数据时——

既然二位女神用了都说好,那我们也要给自己安排一下???
安排完了看看下边的几段代码,是不是你的日常:

俗话说得好,写Bug 3分钟,Debug 3小时,出现这些蜜汁Bug,真是让我们这些新手小白摸不着头脑。
说到底,出现这些Bug还是因为定义数组时,必须指定它的大小。一旦数组的大小被确定,就不能随意向数组中增加元素。因此,特别容易出现下标越界的问题。除此以外,我们也不能将数组的内容拷贝给其他数组作为初始值或者为其他数组赋值。
为了克服数组的这些弊端,C++标准库提供了被封装的动态数组——vector。Vector可以存放任意类型的数据,容量可以自动扩展,堪称pro版数组!接下来,就让我们一起来了解vector类型该如何使用吧!
加入头文件
Step 0

构造
Step 1
Vector是一个类模板,类模板在定义类时将一些类型信息抽取出来,用模板参数来替换,从而使类更具通用性。

用vector定义动态数组的形式为:
vector数组对象名(数组长度)
我们以int类型为例,看一些构造vector的例子。

增加和删除元素
Step 2
Vector最基本的内存模型是栈结构,后进先出,可以用下面的手绘图直观表示⬇️



具体代码实现如下。

获取vector的长度
Step 3
经过一系列的pop和push操作之后,vector现在到底处于什么样的状态呢?我们可以调用size()函数获取向量中元素的函数,调用empty()函数检查向量是否为空。

通过下标访问某一个元素
Step 4
对于向量c,我们可以用c.at(index)的方式访问它的元素,index为元素的下标。

使用迭代器
Step 5

迭代器(iterator)是一种用于遍历容器内全部元素的数据类型,它的定义方式如下:
vector::iterator iter
(定义一个T类型vector的迭代器)
直白点说,迭代器就是一个封装版的“聪明”的指针。关于迭代器的使用,让我们一起来看几个例子吧。

我们还可以使用迭代器在特定位置插入和删除元素。这两种操作分别对应insert和erase函数,具体用法如下。

清除所有数据
Step 6
对于向量c,只要调用c.clear()就可以清除c中的所有数据啦~



怎么样,看完这么多介绍,你是不是觉得vector超级无敌好用?最后,我们再总结一下,相比数组,pro版本的数组vector到底在哪些地方做了改进。
大小能否变化
vector属于变长容器,即可以根据数据的插入删除重新构建容器容量,但array和数组属于定长容量。
初始化
数组不能将数组的内容拷贝给其他数组作为初始值,也不能用数组为其他数组赋值,而向量可以。
vector提供了更好的数据访问机制,即可以使用及at访问方式,使得访问更加安全。而数组只能通过下标访问,在程序的设计过程中,更容易引发访问错误。
vector提供了size和判空的获取机制,而数组只能通过遍历或者通过额外的变量记录数组的size。
vector提供了可以动态插入和删除元素的机制,而array和数组则无法做到,或者说array和数组需要完成该功能则需要自己实现完成。
深度搜索:内存中的位置
C++中数组为内置的数据类型,存放在栈中,其内存的分配和释放完全由系统自动完成;vector,存放在堆中,由STL库中程序负责内存的分配和释放,使用方便。
Pro版本哪里都好,唯一的缺点就是贵了点(颠扑不破的真理)。想要享受vector的便捷,需要昂贵的时间代价。Vector的执行效率远低于数组,主要原因是vector的扩容过程要消耗大量的时间。所以到底何时应使用vector,何时使用数组,还是应该具体问题具体分析。