🌟个人主页落叶
🌟当前专栏:C++专栏
目录
find 查找(注意这个是算法模块实现,不是vector的成员接口)
vector的介绍及使用
vector的介绍
使用STL的三个境界:能用,明理,能扩展 ,那么下面学习vector,我们也是按照这个方法去学习。
vector的使用
vector的定义
vector学习时一定要学会查看文档:vector的文档介绍,vector在实际中非常的重要,在实际中 我们熟悉常见的接口就可以,下面列出了哪些接口是要重点掌握的。
(constructor)构造函数声明 | 接口说明 |
vector()(重点) | 无参构造 |
vector(size_type n, const value_type& val = value_type()) | 构造并初始化n个val |
vector (const vector& x); (重点) | 拷贝构造 |
vector (InputIterator first, InputIterator last); | 使用迭代器进行初始化构 造 |
无参构造
无参构造就是构造一个空的容器
vector<int> v1;
构造并初始化n个val
就是初始化10个1。
上面那个范围for底层就是迭代器,当然也可以用。
拷贝构造
就是将v1拷贝给v2。
使用迭代器进行初始化
使用迭代器区间进行初始化
vector iterator 的使用
iterator的使 用 | 接口说明 |
begin + end(重点) | begin获取第一个数据位置的iterator/const_iterator,end获取最后一个数据的下 一个位置的iterator/const_iterator |
rbegin +rend | rbegin获取最后一个数据位置的reverse_iterator,end获取第一个数据前一个位置 的reverse_iterator |
begin+end(重点)
begin是获取第一个数据的位置,end是获取最后一个数据的位置。
rbegin+rend反向迭代器
rbegin获取最后一个位置的数据,rend是获取第一个位置的数据。
vector 空间增长问题
容量空间 | 接口说明 |
size | 获取数据个数 |
capacity | 获取容量大小 |
empty | 判断是否为空 |
resize(重点) | 改变vector的size |
reserve (重点) | 改变vector的capacity |
- capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2 倍增长的。这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是 根据具体的需求定义的。vs是PJ版本STL,g++是SGI版本STL。
- reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代 价缺陷问题。
- resize在开空间的同时还会进行初始化,影响size。
size获取数据的个数
我们可以看到有5个数据,获取的也是5。
capacity获取容量大小
capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2 倍增长的。这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是 根据具体的需求定义的。vs是PJ版本STL,g++是SGI版本STL。
empty判断是否为空
vector为空就返回1,不为空就返回0。
resize(重点) 改变vector的size
下面我们可以看到有效个数变成34了,
下面我们可以看到,其他的都变成0了。
reserve(重点)改变vector的capacity
下面我们可以看到,有效个数不变,空间大小扩容到100了。
vector 增删查改
vector增删查改 | 接口说明 |
push_back(重点) | 尾插 |
pop_back (重点) | 尾删 |
find | 查找。(注意这个是算法模块实现,不是vector的成员接口) |
insert | 在position之前插入val |
erase | 删除position位置的数据 |
swap | 交换两个vector的数据空间 |
operator[] (重点) | 像数组一样访问- |
push_back(重点) 尾插
下面,尾插了1~4,用范围for打印了出来。
pop_back(重点)尾删
下面,我们尾插了1~4,尾删了2次,就是删除了3和4。
find 查找(注意这个是算法模块实现,不是vector的成员接口)
使用find查找需要包含头文件
#include<algorithm>
find是从begin第1个位置查找到end最后一个位置,当然也可以直接指定从那个位置开始查找,那个位置结束。
找到3了,返回3
insert 在n之前插入val
下面,begin就是第一个位置的数据,在这之前插入数据5
如果我们需要在3之前插入数据,begin+2,