首页 > 编程知识 正文

vector的erase函数,用自己的vector

时间:2023-05-05 17:31:03 阅读:56027 作者:2018

定义目录向量访问向量容器中的元素向量公共函数向量的常规用途

虽然vector被翻译为向量,但是在这里使用“变长数组”的说法更容易理解。 也就是说,“长度根据需要自动变化的数组”。 在考试问题中,普通数组可能会超出内存,但在这种情况下,使用vector可以更容易地解决问题。 而且,向量也可以作为邻接表来存储图,对于邻接矩阵的问题(节点数太多)、害怕使用指针实现邻接表的读者来说非常简单。

需要的头文件:

# include vector http://www.Sina.com /

用户命名空间STD; vector的定义需要的其他东西:

向量类型名称; 上面的定义实际上相当于一维数组name[ SIZE ]。 但是,其长度可以根据需要变更。

节约空间,通俗地说就是“边长排列”。

类似于一维阵列,这里的类型名称可以是任何基本类型,例如: int、双精度、char、结构等等,并且可以是STL标准容器

例如,向量、集、队列等。 请记住,如果typename也是STL容器,则在符号之间添加空格。

因为使用C 11之前的标准编译器可能会将其视为移位操作,从而导致编译错误。vector的定义的格式:

# include cstdio # includevectorusingnamespacestd; 结构稳定{ int age; char name[20]; (; intmain(void ) {vectorint a; 向量双精度b; VEchar c; vectorstudent d; 返回0; 如果typename为vector,则定义:如下

vector vectorint name; //之间插入空格

二维数组的定义很容易联想到。 也就是说,一维是数组的数组。 二维向量序列也是如此

也就是说,Arrayname[]中的所有元素都是向量。

初学者可以将二维向量数组理解为两个维度都是可变长度的二维数组。

如何定义向量数组:

vectortypenamearrayname [ array size ];

这样,array name [0]~array name [ array size-1 ]的各要素是载体容器。

与vectorvectorint name不同,此书写方法的一维长度已经固定为arraySize,而访问vector容器中的元素的vector (只有一维才是“长”)可以通过下标访问,也可以使用迭代器例子:

与访问普通数组一样,对于定义为vector vi的容器来说

直接访问VI [索引]即可(例如vi[0]、vi[1] )。 当然这里的下标是从0到vi.size ()-1。

访问此范围外的元素可能会发生错误。一、通过下标访问

迭代器可以理解为像指针,其定义为:

vector typename :3360迭代器it; //迭代器可以定义向量类型指针,it是向量类型变量,其中typename是定义向量时要填写的类型。

以下是typename为int和double类型的示例:

vectorint :iterator it; vector double :3360迭代器it; 这将获取迭代器it,并从*it获取向量元素二、通过迭代器访问

上面的begin ) )函数作用于:获取a的第一个元素地址。

end ) )函数采用a末尾元素地址的下一个地址。 end ()不存储元素作为迭代器的结尾标志。

此外,迭代器还实现了两种自加操作: it和it

于是遍历vector元素的另一种写法: 从这里可以看出 vi [ i ] 和 * (vi.begin() + i )是等价的。

ng>最后需要指出,在常用STL容器中,只有在vector和string中,才允许使用vi.begin()+3这种迭代器加上整数的写法。

vector常用函数

(1) push_back()
mgdcc,push_back(x)就是在vector后面添加一个元素x,时间复杂度为O(1)。

(2) pop_back()
pop_back()用以删除vector的尾元素,时间复杂度为O(1)。
注意: pop_back()函数是没有参数的

(3) size()
size()用来获得vector中元素的个数,时间复杂度为O(1)。size()返回的是unsigned类型,
不过一般来说用%d不会出很大问题,这一点对所有STL容器都是一样的。
例子:

(4) clear()
clear()用来清空vector中的所有元素,时间复杂度为O(N),其中N为vector中元素的个数。


(5) insert()
inesrt(it,x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度O(N)。

(6)erase()
erase()有两种方法: 删除单个元素、删除一个区间内的所有元素。时间复杂度都为O(N)。
①删除单个元素
erase(it) 即删除迭代器为it处的元素。



②删除一个区间内的所有元素
erase(first,last)即删除 [ first , last) 内的所有元素。

上面的说法可以直到,如果要删除这个vector内的所有元素,
正确的写法应该是v1.erase( v1.begin() , v1.end() )。
这正如前面说过,v1.end()就是尾元素地址的下一个地址。
当然,更方便的清空vector的方法是使用v1.clear()。

vector的常见用途

(1)存储数据

vector本身可以作为数组使用,而且在一些元素个数不确定的场合可以很好地节省空间。有些场合需要根据一些条件把部分数据输出在同一行,数据中间用空格隔开。
由于输出数据的个数不确定的,为了更方便地处理最后一个满足条件地数据后面不输出额外地空格,可以先用vector记录所有需要输出的数据,然后一次输出。

(2)用邻接表存储图
使用vector实现邻接表可以让一些对指针不太熟悉的读者有一个比较方便的写法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。