C++顺序容器-deque双端队列容器

本文详细介绍了C++中的deque容器,包括其作为双端队列的特点,与vector的区别,以及如何进行默认构造、带参数构造、添加删除元素、数据获取、迭代器使用、赋值操作、插入和删除等操作。deque在头部和尾部的添加删除速度快,适合在两端频繁操作的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. deque说明

  • deque(double-ended queue)是双端数组,而vector是单端的
  • deque在接口上与vector相似
  • deque可以随机存取元素
  • 在头部和尾部添加或删除较快,其余位置较慢
  • 在两端插入和删除元素都不会导致重新分配空间

2. deque 对象的默认构造方式

deque <int> deqInt;   // 一个存放 int 的 deque 容器。
deque <float> deq Float; // 一个存放 float 的 deque 容器。

3. deque的带参数构造方法

deque(beg,end); // 从[beg, end)区间中拷贝数据,beg和end为迭代器

deque(n,elem); // 将 n 个 elem 拷贝给本身

deque(const deque &deq); //拷贝构造函数

示例

deque<int> dq;
dq.push_back(1);
dq.push_back(2);
dq.push_back(3);

// 范围构造
deque<int> dq_c(dq.begin(), dq.end());

4. deque的末尾和头部的添加、删除操作

// 末尾添加和删除
deque.push_back(elem);  // 在容器尾部添加一个数据
deque.pop_back();  // 删除容器最后一个数据

// 头部添加和删除
deque.push_front(elem); // 在容器头部插入一个数据
deque.pop_front();   // 删除容器第一个数据

5. deque数据的获取

// at方法,类似于vector操作
deque.at(idx); //返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range

// []操作符
deque[i];   // 获取deque的第i个元素,不抛出异常,直接报错

// 获取头部第一个数据
deque.front();  

// 获取尾部数据
deque.back();

6. deque迭代器

deque.begin(); //返回容器中第一个元素的迭代器

deque.end(); //返回容器中最后一个元素之后的迭代器

deque.rbegin(); //返回容器中倒数第一个元素的迭代器

deque.rend(); //返回容器中倒数最后一个元素之后的迭代器

示例

deque<int> dq;
dq.push_back(1);
dq.push_back(2);
dq.push_back(3);

for (auto it = dq.begin(); it != dq.end(); ++it) {
	cout << *it << endl;
}

7. deque的赋值操作

deque.assign(beg,end); // 从另一个deque的[beg, end)区间中的拷贝赋值给本身

deque.assign(n,elem); // 将 n 个 elem 拷贝赋值给本身

deque& operator=(const deque &deq); //重载等号操作符

deque.swap(deq); // 将 deq 与本身的元素互换

8. deque插入

deque.insert(pos,elem); // 在 pos 位置插入一个 elem 元素的拷贝,返回新数据的位置

deque.insert(pos,n,elem); // 在 pos 位置插入 n 个 elem 数据,无返回值

deque.insert(pos,beg,end); //在 pos 位置插入[beg,end)区间的数据,无返回值

9. deque的删除

deque.clear(); //移除容器的所有数据

deque.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置

deque.erase(pos); //删除 pos 位置的数据,返回下一个数据的位置

10. deque容器的大小

deque.size(); //返回容器中元素的个数
deque.empty(); //判断容器是否为空

// 重新设定容器大小
// 若容器变长,则以默认值填充新位置
// 如果容器变短,则末尾超出容器长度的元素被删除
deque.resize(num); //重新指定容器的长度为 num

// 重新设定容器大小
// 若容器变长,则以elem值填充新位置
// 如果容器变短,则末尾超出容器长度的元素被删除
deque.resize(num, elem); //重新指定容器的长度为 num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值