STL系列之deque双端队列+vector向量容器

deque双端队列容器
      deque双端队列容器与vector一样,采用线性表顺序存储结构。但与vector唯一不同的是,deque采用分块的线性存储结构来存储数据,每块的大小一般为512字节,成为一个deque块,所有的deque块使用一个map块进行管理,每个map数据项记录各个deque块的首地址。这样一来,deque块在头部和尾部都可插入和删除元素,而不需移其他元素(使用push_back()方法在尾部插入元素,会扩张队列:而使用push_front()方法在首部插入元素和使用insert()方法在中间插入元素,只是将原位置上的元素值覆盖,不会增加新元素)。一般来说,当考虑到容器元素的内存分配策略和操作的性能时,deque相当于vector更有优势。参见:ACM程序设计(第二版)
1、创建对象:
         deque<int>q;             //创建没有任何元素的deque对象:
        
deque<int>q(10);      // 创建具有n个元素的deque对象:
        
deque<int>q(10,8);    //创建具有n个元素的deque对象,并赋初值:
2、插入元素:
>>使用push_back()方法从尾部插入元素,会不断扩张队列
        q.push_back();         //把当前元素放在队列尾部
>>从头部插入元素,不会增加新元素,只将原有的元素覆盖
        q.push_front();         //把当前元素放在队列首部
>>从中间插入元素,不会增加新元素,只将原有的元素覆盖
        q.insert(q.begin()+1,88)        //在第二个位置插入88,会将原来的值覆盖
3、遍历元素:
>>前向遍历:
 以数组方式遍历:for(int i=0;i<q.size();i++) cout<<d[i]<<" ";
 以前向迭代器的方式遍历:  deque<int>::iterator it;
                                          for(it=q.begin();it!=q.end();it++)
                                                     cout<<*it<<" ";
>>反向遍历:deque<int>::reverse_iterator rit;
                     for(rit=q.rbegin();rit!=q.rend();rit++)
                                cout<<*rit<<" ";
>>访问第一个元素:    q.front()    //返回第一个元素,
>>访问最后一个元素:   q.back()    //返回最后一个元素
4、删除元素:
>>采用pop_front()方法从头部删除元素
         q.pop_front()        删除队列第一个元素
>>采用pop_back()方法从尾部删除元素
         q.pop_back()        删除队列最后一个元素
>>采用erase()方法从中间删除元素,其参数是迭代器位置
         q.erase(q.begin()+1);        //删除第二个元素
>>使用clear()方法清空deque对象

         q.clear();

vector向量容器
>>头文件#include<vector>
>>创建vector对象,vector<int>vec;
>>尾部插入数字:vec.push_back(a);
>>使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的
>>使用迭代器访问元素vector<int>::iterator it;
                for(it=vec.begin();it!=vec.end();it++)
                   cout<<*it<<endl;
>>插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
>>删除元素: vec.erase(vec.begin()+2);删除第3个元素
                     vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
>>向量大小:vec.size();
>>清空:vec.clear();
>>使用reverse将元素翻转:需要头文件#include<algorithm>
                   reverse(vec.begin(),vec.end())
>>使用sort排序:需要头文件#include<algorithm>,
                    sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).
vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值