C++ STL常用容器(一)

一.vector

   使用时需要包含头文件:

#include<vector>;
1.初始化
vector<int> vec(16); //定义了已知长度16的vector
vector<int> vec(64,2); //定义了初值为2长度64的vector
vector<int> vec(a); //用a向量来创建向量
vector<int> vec(a.begin()+i,a.begin()+j); //定义了值为a中第i个到第j个元素
vector<vector<int>> array(i.vector<int>(j,0));//相当于定义了初始值为0的一个二维数组array[i][j];

vector<vector<int>> array;//相当于定义了的一个二维数组array[i][j];
array.resize(i, vector<int>(j));
2.成员函数的用法
vector<int> v;
v.push_back(elem);//在尾部加入一个数据elem。
v.pop_back();//去掉数组的最后一个数据。
v.size();//返回容器中实际数据的个数。
v.empty();//判断容器是否为空。
v.begin();//返回指向容器第一个元素的迭代器。
v.end();//返回指向容器最后一个元素的迭代器。
v.erase(v.begin()+i,v.begin()+j);//删除v中第i个(从第0个算起)到第j个元素。
v.insert(v.begin()+i,elem);//在第i个元素(从第0个算起)的位置插入数值elem。
3.特点
  • vector是数组的一种类表示
  • 在尾部添加元素是固定时间,在头部或中间添加或删除元素是线性时间.
  • vector是可反转容器
  • 优点:自动管理内存、动态改变长度并随着元素的增减而增大或缩小

二.stack

   使用时需要包含头文件:

#include<stack>;
1.成员函数的用法
stack<int> s;
s.empty(); //堆栈为空则返回真。
s.pop(); //移除栈顶元素。
s.push(elem); //在栈顶增加元素elem。
s.size(); //返回栈中元素数目。
s.top(); //返回栈顶元素。
2.特点
  • 不允许随机访问栈元素
  • 不允许遍历栈,把使用限制在定义栈的基本操作上

三.queue

   使用时需要包含头文件:

#include<queue>;
1.成员函数的用法
queue<int> q;
q.push(elem); //入队,将elem接到队列的末端。
q.pop(); //出队,弹出队列的第一个元素。
q.front();//访问队首元素。
q.back();//访问队尾元素。
q.empty();//判断队列空。
q.size();//访问队列中的元素个数。
2.优先级队列
priority_queue <int,vector<int>,greater<int> > q;//升序队列
priority_queue <int,vector<int>,less<int> >q;//降序队列

/*自定义类型*/
priority_queue<int, vector<int>, cmp> q; 
struct cmp {     
  operator bool ()(int x, int y)     
  {        
     return x > y;   
  }
};
/*结构体声明方式*/
struct node {     
  int x, y;     
  friend bool operator < (node a, node b)     
  {         
    return a.x > b.x;   
  }
};
priority_queue<node>q; 
3.特点
  • 不允许随机访问队列元素
  • 不允许遍历队列,可以进行队列基本操作

四.list

   使用时需要包含头文件:

#include<list>;
1.初始化
list<int>lst; //创建空list
list<int>lst(10); //创建含有10个元素的list
list<int>lst(10,6); //创建含有10个元素6的list
list<int>lst(lst0);//使用lst0(另一个list)初始化lst
list<int>lst(lst0.begin(),lst0.end());//使用lst0(另一个list)初始化lst
2.成员函数的用法
list<int> lst;
lst.pop_back();//删除最后一个元素。 
lst.pop_front();//删除第一个元素。 
lst.push_back(elem);//在list的末尾添加一个元素。 
lst.push_front(elem);//在list的头部添加一个元素。 
lst.clear();//删除所有元素。 
lst.empty();//如果list是空的则返回true。
lst.back();//返回最后一个元素。
lst.begin();//返回指向第一个元素的迭代器。

/*--------------------遍历--------------------*/
list<int>::iterator it;
for(it= lst.begin(); it!=lst.end(); ++it) 
        cout << *it << " "; 
3.特点
  • list为可反转容器
  • list不支持数组表示法和随机访问
  • list强调的是元素的快速插入与删除

五.deque

   使用时需要包含头文件:

#include<deque>;
1.初始化
deque<int>deq;//创建一个空的deque
deque<int>deq(10);//创建含有10个元素的deque
deque<int>deq(10, 6);//创建含有10个元素6的deque
deque<int>deq(deq0);//使用deq0(另一个deque)初始化deq
2.成员函数的用法
deque<int> deq;
deq.front();//返回第一个元素的引用。
deq.back();//返回最后一个元素的引用。
deq.push_front(elem);//把元素elem插入到双向队列的头部。
deq.pop_front();//弹出双向队列的第一个元素。
deq.push_back(elem);//把元素elem插入到双向队列的尾部。
deq.pop_back();//弹出双向队列的最后一个元素。
3.特点
  • deque起始位置插入删除元素时间是固定的
  • 支持随机访问
  • 在序列中部执行插入删除操作时,vector更快一些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不放弃的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值