deque:
作者之前已经写过有关双端队列的知识,不懂戳下面链接并翻到deque的部分。
vector:
vector是 STL 提供的 内存连续的、可变长度 的数组(亦称列表)数据结构。能够提供线性复杂度的插入和删除,以及常数复杂度的随机访问。
在使用它时, 需要包含头文件 vector, #include<vector>
为什么要用vector:
先讲讲vector的缺点,由于vector是动态存储,所以时间效率在一般情况下vector是低于静态数组的。好,现在说说vector的优势。
- vector可动态分配内存
很多时候我们不能提前开好那么大的空间,这种时候我们就需要 vector 来把内存占用量控制在合适的范围内。
- vector 重写了比较运算符及赋值运算符
vector重载了六个比较运算符,以字典序实现,这使得我们可以方便的判断两个容器是否相等。
例如可以利用vector<char> 实现字符串比较。另外vector也重载了赋值运算符,使得数组拷贝更加方便。
-
vector
便利的初始化
由于vector重载了= 运算符,所以我们可以方便的初始化。此外从 C++11 起vector 还支持列表初始化,例如:vector<int> data={0,1,2,3,4};。
vector的使用:
声明与初始:
vector<int> a;//声明一个int型向量a
vector<int> a(10);//声明一个初始大写为10的向量
vector<int> a(10,1);//声明一个int型的长度为10的向量a初始化为1
vecotr<int> b(a);//声明并用向量a初始化向量b
vecotr<int> b(a.begin(),a.begin()+3);//将a向量中从第0个到第2个(共3个)作为向量b的初始值
//还可以用数组直接初始化向量
int n[]={1,2,3,4,5};
vector<int> a(n,n+5);//将数组n的前5个元素作为向量a的初值
vector<int> a(&n[1],&n[4]);//将n[1] - n[4]范围内的元素作为向量a的初值)作为向量b的初始值
元素访问:
1.at()
v.at(pos)返回容器中下标为pos的引用。如果数组越界抛出std::out_of_range 类型的异常。
2.operator[]
v[pos]返回容器下标为pos的应用,不执行越界检查。
3.front()
v.front()返回首元素的引用。
4.back()
v.back()返回末尾元素的引用。
5.data()
v.data() 返回指向数组第一个元素的指针。
与迭代器有关:
6.begin()
返回指向首元素的迭代器
7.end()
返回指向数组尾端占位符的迭代器,注意是没有元素的。
8.rbegin()
返回指向逆向数组的首元素的逆向迭代器,可以理解为正向容器的末元素。
9.rend()
返回指向逆向数组末元素后一位置的迭代器,对应容器首的前一个位置,没有元素。
与长度有关:
10.empty()
empty()返回bool值,若v.empty()==true,说明v是空的,否则为非空(即empty()==false)
11.size()
size(),返回容器长度(元素数量),即std::distance(v.begin(),v.end())。
元素增删与修改
12.clear()
清空所有元素
13.insert()
支持在某个迭代器位置插入元素、可以插入多个。复杂度与 pos
距离末尾长度成线性而非常数的
14.push_back()
在末尾插入一个元素,均摊复杂度为 常数,最坏为线性复杂度。
15.pop_back()
删除末尾元素,常数复杂度。
16.swap()
与另一个容器进行交换,此操作是 常数复杂度 而非线性的。
举例:
讲了这么多来举个栗子(请看代码,可以自己试着实现):
1.
不知道迭代器的戳这里C++STL容器入门1(迭代器Iterator)!_Rudy1124的博客-CSDN博客
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> a;
for(int i=1;i<=5;i++){
int x;
cin>>x;
a.push_back(x);//存入元素
}
//两种输出方式
for(int i=0;i<a.size();i++){
cout<<a[i]<<" ";
}
cout<<endl;
vector<int>::iterator it;//利用迭代器遍历输出元素
for(it=a.begin();it!=a.end();++it){
cout<<*it<<" ";
}
return 0;
}
输出结果:
input:
1 2 3 4 5
output:
1 2 3 4 5
1 2 3 4 5
PS:vector还经常用来存图,可以代替链式前向星。想继续学习相关知识的戳下面的链接。
最短路(图论,内容丰富从入门到提高!!!)_Rudy1124的博客-CSDN博客
总结:
大概就讲这么多,更多STL容器C++STL——序列式容器2。
感谢观看,不妨点个赞再走!QAQ