浅谈Vector
前言
这些天在leetcode刷题大多数时候需要用到对vector进行使用和操作,下面就来总结一下vector的常见用法。
vector的定义
在使用vector之前需要在代码头部添加#include<vector>
单独定义一个vector:
vector<typename> name;
这里的typename可以是任何基本类型,例如int、double、char、结构体等,也可以是vector、set、queue等STL标准容器,不过注意一个细节,在定义typename为STL容器时,要在>>中间加上空格,因为C++11之前会把它视为位移操作,例如:
vector<vector<int>>name;//可能会被识别为位移操作符
vector<vector<int> > name;
六种初始化方法:
vector<int> a;//vector为空,size为0,没有分配内存空间
vector<int> b(a);//或者
vector<int>b = a;//拷贝初始化,b与a有相同的元素和容量
vector<int> c = {
1, 2, 3, 4, 5, 6};//拷贝列表中的元素
vector<int> d(c.begin() + 1, c.end() - 1);//d初始化为两个迭代器指定范围中元素的拷贝
vector<int> e(7);//e中将包含7个元素,每个元素进行缺省的值初始化,对于int,也就是被赋值为0,因此e被初始化为包含7个0
vector<int> f(6,3);//指定值初始化,f被初始化为包含7个值为3的int值
二维数组初始化
vector<vector<int> > a;//初始化一个二维的int型数组
vector容器内元素的获取
通过下标访问
vector<int> a;
我们可以通过下标对a内元素进行访问,例如a[1] == 2 ,当然,这里的下标和普通数组一样都是从0到a.size() - 1 。
通过迭代器访问
迭代器是一种类似于指针的东西,定义为:
vector<int> :: iterator it;
下面为通过迭代器访问vector的一个小例子:
可见a[i] 和 *(a.begin() + i) 是等价的。
vector常用函数
push_back()
push_back(x)就是在vector后面加上一个元素x,时间复杂度为O(1)
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int>a;
for(int i = 1; i <= 5; i ++)a.push_back(i);//插入1~5
for(int i = 0; i < 5; i ++) cout<<a[i]<<" ";
return 0;
}
pop_back()
pop_back()用来删除vector的尾元素,时间复杂度为O(1)
size()
size()用来获得vector中的元素个数,时间复杂度为O(1),size()的返回类型为unsigned类型
clear()
顾名思义,clear()就是清楚vector中所有元素,时间复杂度为O(n),n为vector中元素个数
insert()
insert(it, x)用来向vector的任意迭代器it处插入一个元素x,时间复杂度为O(n)
erase()
erase()既可以删除单个元素也可以删除一个区间内所有元素
(1)删除单个元素
erase(it)删除迭代器为it的元素
(2)删除一个区间内所有元素
erase(a, b)即为删除[a, b)内所有元素
下面来做两题吧!
1470. 重新排列数组
1929. 数组串联
解决方案可以看看leetcode上的题解,或者是:我的解决方案在此