C++标准模板库(STL)中的双端队列(Deque)

C++标准模板库(STL)中的双端队列(Deque)

STL中的双端队列(Deque)是一种经常用于需要随机访问的数据结构。Deque是一个双向开口的连续线性空间,可以在其两端进行插入或删除操作,支持快速的随机访问,时间复杂度为O(1)。

Deque容器可以存储任意类型的数据,如int、double、string等。本文将介绍Deque容器的基本操作、常用函数、以及如何使用自定义类型创建Deque容器。

创建Deque容器

创建Deque容器的方法与vector容器类似,可以使用默认构造函数来创建一个空的Deque。如果想要创建一个已有元素的Deque,可以使用以下语法:

#include <deque>
using namespace std;

deque<int> d1;          //创建一个空Deque
deque<int> d2(10);      //创建一个有10个元素的Deque,每个元素的值都为0
deque<int> d3(10, 1);   //创建一个有10个元素的Deque,每个元素的值都为1
deque<int> d4 = {1, 2, 3, 4, 5};    //使用初始化列表创建Deque
deque<int> d5(d4.begin(), d4.end());   //从一个已有的Deque中创建新的Deque

上述代码中,首先我们需要包含deque头文件,并使用了using namespace std;语句进行命名空间的声明。

插入与删除操作

Deque容器支持在双端进行插入和删除操作,如下所示:

#include <deque>
using namespace std;

deque<int> d;

d.push_back(10);  //在尾部插入一个元素
d.push_front(20); //在头部插入一个元素

d.pop_back();  //从尾部删除一个元素
d.pop_front(); //从头部删除一个元素

访问元素

Deque容器与vector容器一样支持随机访问,可以通过下标或迭代器访问容器中的元素。如下所示:

#include <deque>
using namespace std;

deque<int> d = {1, 2, 3, 4, 5};

cout << d[0] << endl;  //使用下标来访问容器中的元素
cout << d.at(3) << endl; //使用at()函数来访问容器中的元素

for(auto it = d.begin(); it != d.end(); it++)  //使用迭代器遍历容器中的元素
{
    cout << *it << " ";
}

常用函数

Deque容器有许多操作函数,本节将介绍Deque容器中的一些常用函数。

size和empty函数

#include <deque>
using namespace std;

deque<int> d = {1, 2, 3, 4, 5};

if(!d.empty())   //判断容器是否为空
{
    cout << "size: " << d.size() << endl;   //输出容器大小
}

clear函数

#include <deque>
using namespace std;

deque<int> d = {1, 2, 3, 4, 5};

d.clear();     //清空容器

insert函数

#include <deque>
using namespace std;

deque<int> d = {1, 2, 3, 4, 5};

d.insert(d.begin()+2, 100);   //在第3个元素前插入一个数值为100的元素

erase函数

#include <deque>
using namespace std;

deque<int> d = {1, 2, 3, 4, 5};

d.erase(d.begin()+3);   //删除第4个元素

swap函数

#include <deque>
using namespace std;

deque<int> d1 = {1, 2, 3};
deque<int> d2 = {4, 5};

d1.swap(d2);   //交换d1和d2的元素

使用自定义类型创建Deque容器

除了基本数据类型,我们还可以使用自定义的结构体或类来创建Deque容器。下面是一个自定义的Person结构体的例子:

#include <deque>
using namespace std;

struct Person
{
    string name;
    int age;
};

deque<Person> d;

d.push_back({"Tom", 20});   //在尾部插入一个Person
d.push_front({"Jerry", 19});  //在头部插入一个Person

上述代码中,我们定义了一个Person结构体,包含了姓名和年龄两个成员变量。由于Deque容器的元素可以是任意类型,因此我们可以将Person结构体作为Deque容器的元素类型,并使用Person结构体储存姓名和年龄信息。

结论

本文介绍了STL中的Deque容器,包括如何创建Deque、插入和删除操作、访问元素、常用函数、以及使用自定义类型创建Deque的方法。Deque容器是一个非常实用的双向队列容器,在需要随机访问的场景下表现非常出色。它不仅可以存储基本数据类型,还可以存储自定义的结构体或类对象,非常灵活。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程