概述
目录
- 前言
- Vector
- List
- Deque
- Stack
- Queue
- Priority_queue
前言
本文整理了一些STL中顺序容器的用法和特性。
顺序容器主要包括:vector、list、deque,以及deque的延伸stack、queue
Vector
vector的存储空间与普通数组相同,是连续的。它拥有三种容器中最快的访问速度,同理插入和删除是三种容器中最慢的,以下给出一些基本操作。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> a2[100];//申明一个二维的vector容器
vector<int> a1(40,9);//初始化40个值为9的元素
a1.push_back(1);//添加元素
a1.pop_back();//删除末尾元素
bool flag=a1.empty();//判断是否有元素
int length1=a1.size();//获取a1的长度
int length2=a2[1].size();//获取a2某一行的长度
int k=a1[3];//元素引用。二维引用同二维数组,如a2[1][1]
a1.insert(a1.begin()+1,10,7);//从a1[1]开始插入10个7
a1.erase(a1.begin(),a1.begin()+11);//删除从a1[1]到a1[11]之间的元素,注意与前者的区别
a2[1].clear();//清除元素
for(int i=0;i<a1.size();++i)//元素的遍历(下标)
cout<<a1[i]<<" ";
vector<int>::iterator it=a1.begin();//元素的遍历(迭代器)
while(it!=a1.end())
{
cout<<*it<<" ";
++it;
}
return 0;
}
优点:
1.相当于不指定大小的数组,可以方便的存储在连续的空间内。
2.运用下标,随机访问速度快,同数组。
3.基于连续空间存储,总体节省空间。
缺点:
1.在vector中间插入和删除元素很慢。
2.当数据大小超过vector默认的大小时,用重新分配内存。
在图论中,vector可以用于存储节点之间的连接关系。
List
list的存储空间是不连续的,基于链表实现。相较于Vector,在list中间插入或删除元素很快,但随即访问list中的元素则较慢,只能用迭代器遍历。
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int> a1(40,9);//初始化40个元素都为9的list
a1.push_back(8);//在尾部添加元素
a1.pop_back();//剔除尾部元素
a1.push_front(8);//在头部添加元素
a1.pop_front();//删除头部元素
bool flag=a1.empty();//判断是否为空
int length=a1.size();//获取list的长度
a1.reverse();//反转
a1.sort();//排序
a1.insert(a1.begin(),3,4);//从a1[0]插入3个4
a1.unique();//删除相邻的重复元素
a1.remove(8);//删除相同元素
a1.front();//返回第一个元素
a1.back();//返回最后一个元素
list<int>::const_iterator it=a1.begin();//用迭代器遍历
while(it!=a1.end())
{
cout<<*it<<" ";
++it;
}
return 0;
}
优点:
1.最快的插入和删除元素的速度。
2.存储空间不连续,更灵活。
缺点:
1.随机访问元素过慢。
2.用链表实现,空间开销较大。
slist是list的延伸,结构上是单向链表,只能在头部添加元素。
Deque
deque的存储结构由两部分构成,连续的空间和各连续空间之间的联系,可以看做vector和list的结合,deque处理随机访问和插入删除元素的表现都介于vector和list之间,占用内存也介于两者之间。
Stack
stack容器基于deque,实现栈的用法,其中元素的添加删除符合“后进先出原则”。
stack容器中的常用函数:
1.在栈顶添加元素:push();
2.移除栈顶元素:pop();
3.返回栈顶元素:top();
4.返回栈的元素个数:size();
5.判断是否为空栈:empty();
代码演示:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> s;
s.push(10);//在栈顶添加元素10
s.push(11);
s.push(12);
s.push(13);
s.pop();//移除栈顶元素
int k=s.top();//返回栈顶元素
int length=s.size();//返回元素个数
bool flag=s.empty();//判断是否有元素
while(!s.empty())//出栈演示
{
cout<<s.top()<<" ";
s.pop();
}
return 0;
}
Queue
queue容器基于dqueue,实现单向队列的用法,元素的添加和删除符合“先进先出”原则。
queue中常用的函数:
1.末端添加元素:push();
2.删除头部元素:pop();
3.返回末端元素:back():
4.返回头部元素:front();
5.返回队列长度:size();
6.判断是否为空:empty();
代码演示:
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int> q;
q.push(10);//添加元素
q.push(11);
q.push(12);
q.push(13);
q.pop();//移除头部元素
int k1=q.front();//返回头部元素
int k2=q.back();//返回末端元素
int length=q.size();//获取队列中元素的个数
bool flag=q.empty();//判断队列中是否有元素
while(!q.empty())//出队列演示
{
cout<<q.front()<<" ";
q.pop();
}
return 0;
}
Priority_queue
priority_queue包含在queue头文件中,它与queue的区别是,能对添加的元素进行自动排序,每添加一个元素就会把它插入在队列中合适的位置,是队列顺序。移除的元素为最大的元素(默认),可以通过定义结构体变量进行其他方式的排序。
最后
以上就是落后鼠标为你收集整理的STL:顺序容器前言VectorListDeque的全部内容,希望文章能够帮你解决STL:顺序容器前言VectorListDeque所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复