目录
Acwing把锚点禁用了
1. 介绍
- vector是表示可变大小数组的序列容器。
- vector和数组类似,采用连续的空间存储元素。和数组一样,可以采用间接访问运算符[]对vector中的元素进行访问。
- vector的大小可以动态改变。vector分配空间策略:vector会分配一些额外的空间以适应可能的增长。
- vector增加存储空间的方法:当这个数组的容量不够时,系统会重新划分一块内存区block2,大小一般使原内存区block1大小的1.5到2倍,然后将block1的数据先复制到block2的前面的区域,然后插入的元素在后面,block1内存区被释放。
- 与其它动态序列容器(dequeue、list、forward_list)相比,vector在访问元素时更高效,在末尾添加元素和删除元素相对高效。
2. 声明及初始化
- 头文件
#include <vector>
- 声明&初始化
vector<int> vec; // 声明一个int型向量
// 下方可以不用记,算法题用到很少
vector<int> vec(5); //声明一个初始大小为5的int向量
vector<int> vec(10, 1); //声明一个初始大小为10且值都是1的向量
vector<int> vec(tmp); //声明并用tmp向量初始化vec向量
vector<int> tmp(vec.begin(), vec.begin() + 3); //用向量vec的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};
vector<int> vec(arr, arr + 5); //将arr数组的元素用于初始化vec向量
//说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
//这个主要是为了和vec.end()指针统一。
vector<int> vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
3.1容量大小
// 容量大小
vec.size();
// 容量判空
vec.empty();
3.2 增
// 末尾添加元素
vec.push_back();
// 任意位置添加元素(不常用)
vec.insert(const_iterator position, [size_type n] , const value_type);
3.3 删
// 末尾位置删除
vec.pop_back();
// 任意位置删除元素(不常用)
vec.erase( const_iterator position) // 删除某一个位置元素
vec.erase( const_iterator first, const_iterator_last); // 删除某一个范围元素
3.4 查&改
vec.begin(); // 指向最开始元素位置的指针
vec.end(); // 指向最后一个元素的下一个位置的指针
vec.front(); // 访问第一个元素
vec.back(); // 访问最后一个元素
4.1遍历元素
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); it++)
cout << *it << endl;
//或者
for (size_t i = 0; i < vec.size(); i++) {
cout << vec.at(i) << endl;
}
4.2 元素翻转
#include <algorithm>
reverse(vec.begin(), vec.end());
4.3元素排序
#include <algorithm>
sort(vec.begin(), vec.end()); //采用的是从小到大的排序
//如果想从大到小排序,可以采用上面反转函数,也可以采用下面方法:
bool Comp(const int& a, const int& b) {
return a > b;
}
sort(vec.begin(), vec.end(), Comp);