📜  C++ STL中的双端队列(1)

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

C++ STL中的双端队列

双端队列(deque)是一种数据结构,是一种与队列(queue)相似的数据结构,不同之处在于它允许在队列的两端进行插入和删除操作。在C++ STL中,我们可以使用std::deque类来实现双端队列的功能。

定义和初始化

我们可以使用以下语句来定义和初始化一个双端队列:

#include <deque>

std::deque<int> deque1;  // 定义一个空的双端队列

std::deque<int> deque2(5);  // 定义一个大小为5的双端队列,初始元素值都为0

std::deque<int> deque3(10, 3);  // 定义一个大小为10的双端队列,初始元素值都为3

// 将vector中的元素复制到deque中
std::vector<int> vec {1, 2, 3, 4, 5, 6};
std::deque<int> deque4(vec.begin(), vec.end());

另外,我们也可以通过拷贝构造函数来创建一个新的双端队列,例如:

std::deque<int> deque5(deque4);  // 将deque4拷贝给deque5
插入和删除元素

在双端队列中,我们可以在队列的两端进行操作,分别是头部和尾部。具体方法如下:

在队列头部插入元素

在双端队列头部插入元素可以使用以下函数:

void push_front(const T& val);  // 在队头插入一个元素
void push_front(T&& val);       // 在队头插入一个元素

例如,在队头插入一个元素3:

deque1.push_front(3);
在队列头部删除元素

在双端队列头部删除元素可以使用以下函数:

void pop_front();  // 删除队头元素

例如,删除队头元素:

deque1.pop_front();
在队列尾部插入元素

在双端队列尾部插入元素可以使用以下函数:

void push_back(const T& val);  // 在队尾插入一个元素
void push_back(T&& val);       // 在队尾插入一个元素

例如,在队尾插入一个元素4:

deque1.push_back(4);
在队列尾部删除元素

在双端队列尾部删除元素可以使用以下函数:

void pop_back();  // 删除队尾元素

例如,删除队尾元素:

deque1.pop_back();
访问元素

在双端队列中,我们可以像访问数组一样,通过下标访问双端队列中的元素。此外,我们也可以通过以下函数来访问双端队列中的元素:

reference front();            // 返回队头元素引用
const_reference front() const;  // 返回队头元素引用
reference back();             // 返回队尾元素引用
const_reference back() const;   // 返回队尾元素引用

例如,获取队头元素和队尾元素:

std::cout << "队头元素:" << deque1.front() << std::endl;
std::cout << "队尾元素:" << deque1.back() << std::endl;
遍历双端队列

我们可以使用迭代器来遍历双端队列中的元素,具体方法如下:

std::deque<int>::iterator it;
for(it = deque1.begin(); it != deque1.end(); it++)
{
    std::cout << *it << " ";
}
std::cout << std::endl;

此外,我们也可以使用auto关键字来自动推导迭代器类型,例如:

for(auto it = deque1.begin(); it != deque1.end(); it++)
{
    std::cout << *it << " ";
}
std::cout << std::endl;
总结

双端队列是一个非常实用的数据结构,在我们实现程序的时候经常会使用到。C++ STL中提供了std::deque类,使我们在使用双端队列的时候更加方便和快捷。希望以上介绍能对大家学习C++ STL中的双端队列有所帮助。