1. 概念:
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
2. 初始化:
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)、容量:
返回值 | 函数 | 说明 |
---|---|---|
int | vec.size() | 向量大小 |
int | vec.max_size() | 向量最大容量 |
int | vec.resize() | 更改向量大小 |
int | vec.resize() | 更改向量大小 |
bool | vec.resize() | 向量判空 |
vec.shrink_to_fit() | 减少向量大小到满足元素所占存储空间的大小 |
(2)、增删改:
返回值 | 函数 | 说明 |
---|---|---|
vec.assign() | 多个元素赋值 | |
vec.push_back() | 末尾添加元素 | |
vec.pop_back() | 末尾删除元素 | |
vec.insert() | 任意位置插入元素 | |
vec.erase() | 任意位置删除元素 | |
vec.swap() | 交换两个向量的元素 | |
vec.clear() | 清空向量元素 |
(3).迭代器:
返回值 | 函数 | 说明 |
---|---|---|
vec.begin() | 开始指针 | |
vec.end() | 末尾指针(指向最后一个元素的下一个位置) | |
vec.cbegin() | 指向常量的开始指针(意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。) | |
vec.cend() | 指向常量的末尾指针 |
(4).元素的访问:
返回值 | 函数 | 说明 |
---|---|---|
vec[1] | 下标访问,并不会检查是否越界 | |
vec.at(1) | at方法访问,以上两者的区别就是at会检查是否越界,是则抛出out of range异常 | |
vec.front() | 访问第一个元素 | |
vec.back() | 访问最后一个元素 | |
int* p = vec.data() | 返回一个指针,/可行的原因在于vector在内存中就是一个连续存储的数组,所以可以返回一个指针指向这个数组。这是是C++11的特性。 |