📅  最后修改于: 2023-12-03 15:29:51.278000             🧑  作者: Mango
双端队列(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中的双端队列有所帮助。