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容器是一个非常实用的双向队列容器,在需要随机访问的场景下表现非常出色。它不仅可以存储基本数据类型,还可以存储自定义的结构体或类对象,非常灵活。