📜  使用 STL 设计前中后队列(1)

📅  最后修改于: 2023-12-03 15:06:51.276000             🧑  作者: Mango

使用 STL 设计前中后队列

STL(Standard Template Library) 是一套 C++ 标准库中的模版类和函数集合,包含了许多常用的数据结构和算法,能够大幅度提高 C++ 的开发效率。在 STL 中,常常使用容器来存储数据,其中常用的容器包括 vector、deque、list、set、map 等等。在这里,我们将介绍如何使用 STL 的 deque 容器来设计前中后队列。

前队列

前队列(deque)也被称为双端队列,它是一种允许在队列头和尾快速添加和删除元素的容器。在 STL 中,deque 容器通过头文件 <deque> 引入,使用起来十分方便。

定义前队列
#include <deque>

using namespace std;

deque<int> dq;

在上述代码中,我们定义了一个 deque 容器,其中的数据类型为 int,名字为 dq。

在前端添加元素
dq.push_front(5);

在上述代码中,我们可以使用 push_front() 函数来在前端添加元素,其中的参数为我们要添加的元素的值。

在后端添加元素
dq.push_back(6);

在上述代码中,我们可以使用 push_back() 函数来在后端添加元素,其中的参数为我们要添加的元素的值。

访问前端元素
int front_element = dq.front();

在上述代码中,我们可以使用 front() 函数来访问前端元素,并将其值存储在一个变量中。

访问后端元素
int back_element = dq.back();

在上述代码中,我们可以使用 back() 函数来访问后端元素,并将其值存储在一个变量中。

删除前端元素
dq.pop_front();

在上述代码中,我们可以使用 pop_front() 函数来删除前端元素。

删除后端元素
dq.pop_back();

在上述代码中,我们可以使用 pop_back() 函数来删除后端元素。

中队列

中队列(deque)是一种允许在队列头、尾和中间快速添加和删除元素的容器。在 STL 中,虽然没有中队列的标准实现,但是我们可以使用 vector 容器来实现类似于中队列的功能。

定义中队列
#include <vector>

using namespace std;

vector<int> mid_q;

在上述代码中,我们定义了一个 vector 容器,其中的数据类型为 int,名字为 mid_q。

在任意位置添加元素
mid_q.insert(mid_q.begin() + mid_q.size() / 2, 8);

在上述代码中,我们可以使用 insert() 函数来在任意位置添加元素,其中第一个参数为插入位置,第二个参数为要插入的元素的值。

访问任意位置元素
int mid_element = mid_q[mid_q.size() / 2];

在上述代码中,我们可以使用下标来访问任意位置的元素,并将其值存储在一个变量中。

删除任意位置元素
mid_q.erase(mid_q.begin() + mid_q.size() / 2);

在上述代码中,我们可以使用 erase() 函数来删除任意位置的元素,其中的参数为要删除的元素的迭代器。

后队列

后队列(deque)也被称为双端队列,和前队列类似,它也是一种允许在队列头和尾快速添加和删除元素的容器。在 STL 中,deque 容器通过头文件 <deque> 引入,使用起来十分方便。

定义后队列
#include <deque>

using namespace std;

deque<int> hq;

在上述代码中,我们定义了一个 deque 容器,其中的数据类型为 int,名字为 hq。

在前端添加元素
hq.push_front(5);

在上述代码中,我们可以使用 push_front() 函数来在前端添加元素,其中的参数为我们要添加的元素的值。

在后端添加元素
hq.push_back(6);

在上述代码中,我们可以使用 push_back() 函数来在后端添加元素,其中的参数为我们要添加的元素的值。

访问前端元素
int front_element = hq.front();

在上述代码中,我们可以使用 front() 函数来访问前端元素,并将其值存储在一个变量中。

访问后端元素
int back_element = hq.back();

在上述代码中,我们可以使用 back() 函数来访问后端元素,并将其值存储在一个变量中。

删除前端元素
hq.pop_front();

在上述代码中,我们可以使用 pop_front() 函数来删除前端元素。

删除后端元素
hq.pop_back();

在上述代码中,我们可以使用 pop_back() 函数来删除后端元素。

总结

使用 STL 设计前中后队列非常方便,能够大幅度提高 C++ 的开发效率。在使用时,我们只需根据需求选择不同的容器和函数即可。在实践中,如何选择合适的数据结构和算法是非常重要的,需要根据具体情况进行分析和选择。