vector概念
- vector可以简单理解为一个数组,但又不仅仅是一个数组,数组的大小一般都是固定的,但vector可以动态增长,并且vector也有许多与stl其他容器一致的接口。
vector的创建
使用vector要包含vector头文件,vector中可以存储任意类型,在创建变量时就要指定存储类型。
#include <iostream>
#include <string>
#include <vector>//使用vector必须要包含头文件
using namespace std;
int main() {
vector<int> v;//无参构造,存储类型为int型
vector<int> v1(3, 0);//舒适化3个0
vector<int> v2(v1);//拷贝构造
vector<int> v3(v1.begin(), v2.begin());//迭代器构造
vector<string> v4;//无参构造,存储类型为string型
return 0;
}
vector的遍历
vector有三种常见的遍历方式:
int main() {
vector<int> v1(3, 0);//舒适化3个0
//第一种,通过下标访问:
for (size_t i = 0; i < v1.size(); i++) {
cout << v1[i] << " ";
}
cout << endl;
//第二种,范围for循环
for (int num : v1) {
cout << num << " ";
}
cout << endl;
//第三种,迭代器访问
vector<int>::iterator it = v1.begin();
while (it != v1.end()) {
cout << *it << " ";
it++;
}
cout << endl;
return 0;
}
第一种方式,vector实际上是一个类,但是为了使用习惯,C++在类里面重载了[]运算符,使其能像数组一样通过下标访问元素。
第二种方式,范围for实际上在底层还是转换为迭代器来遍历数组元素。
第三种方式,这种访问方式是STL库所有容器通用的访问方式,每个容器都可以通过对应的迭代器访问。
vector常用接口
迭代器接口
vector v;
v.begin()//返回v的第一个元素的迭代器
v.end()//返回v的最后一个位置的下一个位置的迭代器
v.rbegin()//反向迭代器,返回v的最后一个位置的迭代器
v.rend()//返回v的起始位置的前一个迭代器
vector空间相关接口
vector v;
v.size()//返回v当前元素个数
v.capacity()//返回v的空间大小
v.empty()//若v为空,返回true,否则返回false
v.resize()//通过该函数改变v的有效元素个数
//v.resize(4,2)//将v的有效元素个数置为4,若原来元素个数大于4,则只保留4个元素,
//若原来元素个数小于4,则增加到4个,增加的元素默认值为2.
v.reverse()//将v的空间扩容至指定数,只可以扩大容量,不可以缩小容量!
vector增删查改接口
vector v;
v.push_back()//尾插一个数据
v.pop_back()//尾删一个数据
v.erase(v.begin())//删除指定位置数据,传入数据为迭代器,可删除单个位置,也可删除一段区间。
//注意该函数可能会使迭代器失效,使用时要多加注意。
find()//vector没有内置的find函数,只能使用全局函数。
//使用该函数要添加<algorithm>头文件
v.insert()//指定位置插入数据
v.swap()//交换两个vector