C++双端队列deque用法详解,涉及增删改查以及其他方法

1 初始化

// 头文件
#include <deque>
// 1.指定大小不带初值的初始化
deque<int> q;
// 2.直观的初始化
deque<int> q{1,2,3,4};
// 3.批量初始化
int size=10;
deque<int> q(size,1); // 容器q大小为10,初始值1
// 4.通过容器初始化
// 其他类似可做参考
vector<int> vec{1,2,3,4};
deque<int> q(vec.begin(),vec.end()); // q变为{1,2,3,4}

2 常用方法

2.1 增

2.1.1 assign()

// 假设容器vec为{4,3,2,1}
deque<int> q;
q.assign(vec.begin(),vec.end()); // q变为{4,3,2,1}

deque<int> q2;
q2.assign(10,1); // q2大小为10,初值为1,即{1,1,1,1,1,1,1,1,1,1}                                                                

2.1.2 push_back

deque<int> q;
q.push_back(1); // q变为{1}
q.push_back(2)l // q变为{1,2}

2.1.3 push_front

deque<int> q;
q.push_front(1); // q变为{1}
q.push_front(2); // q变为{2,1}

2.1.4 insert()

// 假设双端队列p为{4,3,2,1}
p.insert(p.begin()+1,-9); // 在索引1的位置插入一个元素,其值为-9
// p变为{4,-9,5,5,3,2,1}

//-----------------------------------------------------------------

// 假设双端队列p2为{4,3,2,1}
p2.insert(p2.begin()+1,2,5); // 在索引1的位置插入2个元素,其值为5
// 容器p2变为{4,5,5,3,2,1}

//-----------------------------------------------------------------

// 假设双端队列p3为{4,3,2,1},b为{6,7,8,9}
p3.insert(p3.begin()+1,b.begin()+1,b.begin()+3);
// 双端队列p3变为{4,7,8,3,2,1}

2.2 删

2.2.1 pop_back()

// 假设双端队列q为{1,2,3,4}
q.pop_back(); // 删除最后一个元素,变为{1,2,3}

2.2.2 pop_front()

// 假设双端队列q为{1,2,3,4}
q.pop_front(); // 删除第一个元素,变为{2,3,4}

2.2.3 erase()

// 假设双端队列p为{4,3,2,1}
p.erase(p.begin()+1); // 删除索引为1的元素,p变为{4,2,1}

//-------------------------------------------------------------------------

// 假设双端队列p2为{4,3,2,1}
p2.erase(p2.begin()+n,p2.begin()+m); // 从第n个元素开始,删除(m-n)个元素

2.2.4 clear()

// 假设双端队列p为{4,3,2,1}
p.clear(); //清空p中的所有元素

2.3 改

2.3.1 resize()

// 假设双端队列p为{4,3,2,1}
p.resize(10); // 将双端队列p大小调至10,会补充元素,值随机(一般为0)
// 假设双端队列p2为{4,3,2,1}
p2.resize(3); // 将双端队列p2大小调至3,会删除元素,值随机(一般从末尾删除)
// 假设双端队列p3为{4,3,2,1}
p3.resize(10,2); // 将双端队列p3大小调至10,需要补充元素,值指定为2

2.3.2 swap()

// 假设双端队列p为{4,3,2,1}
// 假设双端队列p2为{5,6,7,8,9}
p.swap(p2); // p变为{5,6,7,8,9},p2变为{4,3,2,1}

2.3.3 reverse()

// 假设双端队列p为{4,3,2,1}
reverse(p.begin(),p.end()); // p变为{1,2,3,4}

2.4 查

2.4.1 find()

// 假设双端队列p为{4,3,4,2,1,0}

// 返回元素ele在p中的第一个索引,ele为4时返回index=0
// 若未找到指定的元素,返回下标为p.size()
int index=find(p.begin(),p.end(),ele)-p.begin();

// 返回元素ele在p中的第一个索引(从右往左看,索引也是从右开始),ele为4时返回index=3
// 若未找到指定的元素,返回下标为p.size()
int index2=find(p.rbegin(),p.rend(),ele)-p.rbegin();

2.4.2 front()和back()

// 假设双端队列p为{4,3,2,1}
p.front(); //返回第一个元素4
p.back(); // 返回最后一个元素1

2.4.3 empty()

// 假设双端队列p为{4,3,2,1}
p.empty(); //判断p是否为空,空则返回true;不空则返回false

2.4.4 size()

// 假设双端队列p为{4,3,2,1,0}
p.size() // 返回容器大小,值为5

3 其他方法

持续更新中,喜欢的话点个赞~(其他方法待更新)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值