为什么开始先更新数据结构?博主其实一开始也不怎么喜欢调这些数据,觉得用C语言造轮子才是最好的。后面学习过程中学习的算法逐渐复杂,实际上会发现,了解和调用一些已经写好的库工具是很方便的一件事,我们需要做的是知道如何它的底层和如何实现即可,不需要总是用C语言去造轮子。
一,定义
vector为可变长数组(动态数组),可以随时添加数值和删除元素。同时需要注意:在局部函数中开vector数组是在堆空间开辟的。使用时需要包含头文件<vector>
二,初始化
(1)一维初始化
vector<int> num;
vector<double> num;
vector<node> num;
(2)指定长度和初始化
vector<int> num(n);
//长度为n的动态数组
//指定长度之后就相当于正常数组
(3)初始化多个元素
vector<int> num{1,2,3,4,5}
(4)拷贝初始化
vector<int> num(n+1,0);
vector<int> num2(num);
//拷贝初始化时要注意类型要相同
(5)二维初始化
vector<int> num[5];
//第一位固定为5,第二维长度可变
vector<vector<int>>num;
//行列长度均可变
vector支持随机访问和下标访问
三,相关函数
函数 | 作用 |
front() | 返回第一个数据 |
pop_back() | 删除最后一个数据 |
push_back() | 在尾部加一个数据 |
size() | 返回数据类型(unsigned类型!!!!) |
clear() | 清除所有元素 |
resize(n,v) | 改变数组大小为n,n个空间赋值v(不指定默认为0) |
insert(it,x) | 向迭代器it处插入一个元素 |
erase(first,last) | 删除(first,last)元素 |
begin() | 返回首元素迭代器 |
end() | 返回最后一个元素后一个位置的迭代器 |
empty() | 判断是否为空。 |
排序可以使用sort(num.begin(),num.end());
迭代器:
vector<int> num
vector<int>::iterator it = num.begin();