文章目录
- 前言
- 🌈 Ⅰ vector 类对象的定义
- 1. 定义格式
- 2. vector 对象的构造
- 🌈 Ⅱ vector 类对象的容量
- 🌈 Ⅲ vector 类对象的访问
- 🌈 Ⅳ vector 类对象的修改
- 🌈 Ⅴ vector 定义二维数组
前言
vector 介绍
- vector 是一个可变大小数组的序列容器。
- 和顺序表一样,vector 也采用连续的空间存储不同类型的元素。
- vector 使用类模板定义,顺序表内的元素类型根据 vector 指定的元素决定。
vector 引入
- 使用 vector 之前要先添加头文件
#include <vector>
,并且还要展开 std 空间域内的 vector 类using std::vector;
🌈 Ⅰ vector 类对象的定义
1. 定义格式
- 类模板生成的 vector 顺序表中的元素类型为指定的元素类型。
- 如: typename 为 int 则 vector 顺序表内的元素类型也为 int,其余同理。 本篇文章主要以 int 类型举例。
vector<typename> name;
2. vector 对象的构造
构造函数 | 功能说明 |
---|---|
vector() | 无参构造 |
vector(size_type n, const value_type& val = value_type()) | 构造并初始化 n 个值为 val 的元素,val 的缺省值为 0 |
vector (const vector& x) | 使用已有的 vector 对象拷贝构造新的 vector 对象 |
vector (InputIterator first, InputIterator last) | 使用迭代器进行构造 |
🌈 Ⅱ vector 类对象的容量
函数说明
函数名称 | 功能说明 |
---|---|
size() | 获取顺序表的有效元素个数 |
empty() | 判断当前顺序表是否为空 |
capacity() | 返回当前顺序表能够容纳的最多有效数据个数 |
reserve(n) | 为指定顺序表预留 n 个元素的空间,实际开辟的空间只会 >= n |
resize(n, val) | 将当前顺序表的有效元素改为 n 个,如果 n 大于当前有效数据个数,则用 val 填充 |
void test2()
{
vector<int> v{ 1,2,3,4,5,6,7,8,9,10 };
cout << "size: " << v.size() << endl; // 获取当前顺序表的有效元素个数
cout << "empty: " << v.empty() << endl; // 判断当前顺序表是否为空
cout << "capacity: " << v.capacity() << endl; // 判断当前可容纳的最多有效元素个数
v.reserve(100);
cout << "reserve: " << v.capacity() << endl; // 预留 >= 100 个元素的空间
v.resize(15,3);
cout << "resize: " << v.size() << endl; // 将有效元素个数改成 15 个,超出部分用 3 填充
for (auto val : v)
cout << val << " ";
cout << endl;
}
🌈 Ⅲ vector 类对象的访问
1. operator[] 访问
- 对方括号 [ ] 进行了重载,使得 vector 对象能够像普通数组那样通过 下标 + [ ] 进行访问。
2. 迭代器 iterator 访问
- 当前要使用的 iterator 属于 vector 类域,需要 vector<int::iterator 指定使用的是 vector 类域内的迭代器。
iterator 的使用 | 接口说明 |
---|---|
begin() + end() | begin() 获取数组第一个元素的地址,end() 获取最后一个有效元素的下一个位置 |
rbegin() + rend() | rbegin() 获取最后一个有效数据的位置,rend() 获取第一个数据的前一个位置 |
3. 获取首尾元素
函数名称 | 功能说明 |
---|---|
front() | 获取顺序表的第一个有效元素 |
back() | 获取顺序表的最后一个有效元素 |
🌈 Ⅳ vector 类对象的修改
函数名称 | 功能说明 |
---|---|
push_back(val) | 将 val 尾插进顺序表 |
pop_back() | 对顺序表执行尾删 |
insert(iterator position, const value_type& val) | 向迭代器指向的 pos 位置处插入一个值 val,原 pos 及之后的元素往后挪 |
insert(iterator position, InputIterator first, InputIterator last) | 在指定位置处插入一段迭代器区间内的值 |
swap(vector& x) | 交换两个 vector 对象内的数据 |
clear() | 清除顺序表内的有效数据 |
void test4()
{
vector<int> v1{ 1,2,3,4,5 };
vector<int> v2{ 5,4,3,2,1 };
v1.push_back(1); // 将 1 尾插进顺序表
v1.pop_back(); // 对顺序表执行伪删
v1.insert(v1.begin() + 3, 30); // 在下标 3 处插入 30
v1.swap(v2); // 交换 v1 和 v2 内的数据
// 将 v2 的 0 ~ 2 处的值插入 v1 的 0 号位置
v1.insert(v1.begin(), v2.begin(), v2.begin() + 2);
}
🌈 Ⅴ vector 定义二维数组
vector<vector<int>> array;
- vector 是一个会根据指定类型生成具体类的类模板,<> 号里的可以是任意数据类型,vector<vector> array 表示 array 的每个元素都是一个 vector 一维数组类型的数据。
- 一堆的一维数组组在一起就构成了二维数组。