首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++STL容器之deque容器

c++STL容器之deque容器

作者头像
西西嘛呦
发布2020-08-26 22:46:33
3410
发布2020-08-26 22:46:33
举报

deque是双端数组

deque和vector的区别

  • vector对于头部的插入和删除效率低,数据量越大,效率越低;
  • deque相对于而言,对头部的插入和删除比vector快;
  • vector访问元素时速度比deque快,这和两者的内部实现有关;

deque内部工作原理

deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放着真实数据。中控器维护的是每个缓冲区的地址,使得使用每个deque时像一块连续的内存空间。

deque容器的迭代器是支持随机访问的。

一、deque构造函数

deque<T> deqT
deque(beg,end)
deque(n,elem)
deque(const deque &deq)
#include<iostream>
#include<deque>
using namespace std;
//加入const限制只读,并使用const_iterator
void printDeque(const deque<int>&d) {
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it <<" ";
    }
    cout << endl;
}

void test() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_back(i);
    }
    printDeque(d1);
    deque<int> d2(d1.begin(),d1.end());
    deque<int> d3(4,3);
    deque<int> d4(d1);
}
int main() {
    test();
    system("pause");
    return 0;
}

二、赋值操作(基本上与vector一致)

#include<iostream>
#include<deque>
using namespace std;
//加入const限制只读,并使用const_iterator
void printDeque(const deque<int>&d) {
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it <<" ";
    }
    cout << endl;
}

void test() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_back(i);
    }
    deque<int> d2;
    d2 = d1;
    deque<int> d3;
    d3.assign(d1.begin(),d1.end());
    deque<int> d4;
    d4.assign(4, 3);
}
int main() {
    test();
    system("pause");
    return 0;
}

三、deque大小操作(与vector也基本一致,但是deque中没有容量capaticy限制)

四、deque插入和删除

//两端插入
push_back(ele);
push_front(ele);
pop_back();
pop_front();
//指定位置插入、删除,pos,beg,end都是迭代器
insert(pos,ele);
insert(pos,n,ele);
insert(pos,beg,end);
clear();
erase(beg,end);
erase(pos);

五、deque数据存取(与vector一致,多了取头部的操作)

deque<int> d1 ={1,2,3,4};
访问第一个元素:
d1[0];
d1.at(0);
修改第一个元素:
d1[0] = 2;
d1.at(0) = 2;
访问首元素:
d1.front();
访问尾元素:
d1.back();

六、deque排序(利用algorithm中的sort,默认升序排序)

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
//加入const限制只读,并使用const_iterator
void printDeque(const deque<int>&d) {
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it <<" ";
    }
    cout << endl;
}

void test() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_front(i);
    }
    cout << "排序前:" << endl;
    printDeque(d1);
    sort(d1.begin(), d1.end());
    cout << "排序后:" << endl;
    printDeque(d1);
}
int main() {
    test();
    system("pause");
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档