vector简单使用
之前总结过一个关于vector使用的文章,结果发现使用的时候还是会出错,那就再简单整理一下吧.
一维向量定义
毕竟,vector就是大小可变的数组.一维的情况还是很简单的,
但是,我今天掉坑就掉在了这个上面.
看一下代码吧:
|
|
这样写了之后,运行出来是出问题的.
多出了三个0.
怎么看代码也没问题,写成绿色注释的那句就对了…很奇怪..
最后发现了,因为定义vector的时候,后面加了(n),去掉就可以了..
那么,定义vector的时候带括号与不带括号有什么区别呢??原来:
|
|
这样一来就对了,之前定义的是有初始大小的向量.如果再用push_back()的话,他是追加,所以写入的时候会在后面继续增加容量.
二维向量定义
上面那些还要和二维向量的定义区别开:
vector可以嵌套定义
|
|
最重要的是下面这个定义,这个定义千万别和带括号的弄混了
|
|
做题又遇到一种定义:
|
|
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。
每部分解析:
- 构造函数vector(size_type n, const allocator_type& alloc = allocator_type())表示构造一个使用alloc分配内存(如果是初学,不用管这个,使用默认的就好)的含n个元素的vector,其中每个元素执行值初始化(对于内置类型即初始化为0)。因此vector(n)表示构造一个无名且含n个0的vector对象。
- 构造函数vector(size_type n, const value_type& val, const allocator_type& alloc = allocator_type())表示构造一个使用alloc分配内存的含n个元素的vector,其中每个元素是val的一个拷贝。因此整条语句的含义如第一段所说。
- 从结果上看,类似于创建了一个m×n的二维数组,而且可以通过v[i][j]的方式来访问元素(vector支持下标访问元素)。
此处参考:csdn
vector元素访问
两种方式:
(1)下标访问
(2)迭代器访问
通过下标访问和数组是一样的,不再赘述.
简单介绍一下通过迭代器访问,全都以int为例.
|
|
这样就得到了迭代器it,使用*it就可以操作vector元素了,很简单吧.
|
|
好了,介绍完迭代器用法,开始看函数.
vector常用函数
1.push_back()
最常用的就是push_back()吧,哈哈,我是最常用它,其他人我就不知道咯,他是向vector后面加入元素,每加一次都是会增加capacity的.这也是上面我出错的原因.
2.pop_back()
看看1就知道2了吧,一个增加一个删除了.这个是删除vector的尾元素.但是!!!使用pop_back(),删除元素之后capacity竟然不减少.也就是说,vector原来是多大,使用pop_back()之后还是多大,还是占用空间的.
3.size()
获得vector中元素的个数.so easy;
4.clear()
看名字就知道是清空vector所有元素了吧.
验证了一下,清空也是不改变capacity的.
5.insert(it,x)
插入元素,在it处插入,需要注意的:是插入不是人替代,插入之后,元素后移,那个说来,也是会开辟元素空间咯…
6.erase()函数
erase()函数两种用法:(1)删除单个元素. (2)删除区间元素
不介绍了,感觉很简单啊,无非是一个参数还是两个参数的问题.一个参数就是单个元素,两个参数就是区间首尾.
参考<<算法笔记>>.