C++ deque类使用详解

定义

    deque(双端队列)是由一段一段的定量连续空间构成,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速。 在中间部分安插元素则比较费时,因为必须移动其它元素。
使用之前必须加相应容器的头文件:

#include <deque> // deque属于std命名域的,因此需要通过命名限定,例如using std::deque;

定义的实现代码如下:

deque<int> a; // 定义一个int类型的双端队列a
deque<int> a(10); // 定义一个int类型的双端队列a,并设置初始大小为10
deque<int> a(10, 1); // 定义一个int类型的双端队列a,并设置初始大小为10且初始值都为1
deque<int> b(a); // 定义并用双端队列a初始化双端队列b
deque<int> b(a.begin(), a.begin()+3); // 将双端队列a中从第0个到第2个(共3个)作为双端队列b的初始值

除此之外,还可以直接使用数组来初始化向量:

int n[] = { 1, 2, 3, 4, 5 };
// 将数组n的前5个元素作为双端队列a的初值
// 说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
// 这个主要是为了和deque.end()指针统一。
deque<int> a(n, n + 5); 
deque<int> a(&n[1], &n[4]); // 将n[1]、n[2]、n[3]作为双端队列a的初值

基本操作

容量函数:

#include <iostream>
#include <deque>

using namespace std;

int main(int argc, char* argv[])
{
	deque<int> deq;
	for (int i = 0; i<6; i++)
	{
		deq.push_back(i);
	}

	cout << deq.size() << endl; // 输出:6
	cout << deq.max_size() << endl; // 输出:1073741823
	deq.resize(0); // 更改元素大小
	cout << deq.size() << endl; // 输出:0
	if (deq.empty())
		cout << "元素为空" << endl; // 输出:元素为空

	return 0;
}

添加函数:

#include <iostream>
#include <deque>

using namespace std;

int main(int argc, char* argv[])
{
	deque<int> deq;

	// 头部增加元素
	deq.push_front(4);
	// 末尾添加元素
	deq.push_back(5);
	// 任意位置插入一个元素
	deque<int>::iterator it = deq.begin();
	deq.insert(it, 2);
	// 任意位置插入n个相同元素
	it = deq.begin(); // 必须要有这句
	deq.insert(it, 3, 9);
	// 插入另一个向量的[forst,last]间的数据
	deque<int> deq2(5,8);
	it = deq.begin(); // 必须要有这句
	deq.insert(it, deq2.end() - 1, deq2.end());

	// 遍历显示
	for (it = deq.begin(); it != deq.end(); it++)
		cout << *it << " "; // 输出:8 9 9 9 2 4 5
	cout << endl;

	return 0;
}

删除元素:

#include <iostream>
#include <deque>

using namespace std;

int main(int argc, char* argv[])
{
	deque<int> deq;
	for (int i = 0; i < 8; i++)
		deq.push_back(i);

	// 头部删除元素
	deq.pop_front();
	// 末尾删除元素
	deq.pop_back();
	// 任意位置删除一个元素
	deque<int>::iterator it = deq.begin();
	deq.erase(it);
	// 删除[first,last]之间的元素
	deq.erase(deq.begin(), deq.begin()+1);

	// 遍历显示
	for (it = deq.begin(); it != deq.end(); it++)
		cout << *it << " ";
	cout << endl;

	// 清空所有元素
	deq.clear();

	// 遍历显示
	for (it = deq.begin(); it != deq.end(); it++)
		cout << *it << " "; // 输出:3 4 5 6
	cout << endl;

	return 0;
}

访问元素:

#include <iostream>
#include <deque>

using namespace std;

int main(int argc, char* argv[])
{
	deque<int> deq;
	for (int i = 0; i < 6; i++)
		deq.push_back(i);

	// 下标访问
	cout << deq[0] << endl; // 输出:0
	// at方法访问
	cout << deq.at(0) << endl; // 输出:0
	// 访问第一个元素
	cout << deq.front() << endl; // 输出:0
	// 访问最后一个元素
	cout << deq.back() << endl; // 输出:5

	return 0;
}

结构体队列赋值

#include <queue>
#include <iostream>
struct MyStruct
{
    int num;
};
int main()
{
    // 定义双端队列
    std::deque<MyStruct> q;
    MyStruct s1;
    s1.num = 1;
    // 插入队尾
    q.push_back(s1);
    MyStruct s2;
    s2.num = 5;
    // 插入队首
    q.push_front(s2);
    // 取出队首元素
    MyStruct s2_copy = q.front();
    MyStruct s1_copy = q.back();
    std::cout << "s2 = " <<s2_copy.num << std::endl;
    std::cout << "s1 = " << s1_copy.num << std::endl;
    // 队首元素从队列中移除
    q.pop_front();
    // 队尾元素从队列中移除
    q.pop_back();
 
    // 判断队列是否为空
    if (q.empty())
    {
        std::cout << "Enpty" << std::endl;
    }
    return 0;
}

参考链接

C++ STL deque使用详解
c++如何定义一个结构体队列

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值