// deque 的使用
// deque 是一个双端队列，可以在队列的头部和尾部进行插入和删除操作

// deque 的常用操作
// push_back() 在队列尾部插入元素
// push_front() 在队列头部插入元素
// front() 访问队列头部元素
// back() 访问队列尾部元素
// pop_front() 删除队列头部元素
// pop_back() 删除队列尾部元素
// size() 队列的大小
// empty() 队列是否为空
// clear() 清空队列
// erase() 删除指定位置的元素
// insert() 在指定位置插入元素
// operator[] 访问指定位置的元素
// at() 访问指定位置的元素
// begin() 返回指向队列头部的迭代器
// end() 返回指向队列尾部的迭代器
// rbegin() 返回指向队列尾部的逆向迭代器
// rend() 返回指向队列头部的逆向迭代器
// swap() 交换两个队列
// emplace() 在指定位置构造元素
// emplace_front() 在队列头部构造元素
// emplace_back() 在队列尾部构造元素
// resize() 改变队列的大小
// assign() 赋值
// get_allocator() 返回队列的配置器
// max_size() 返回队列最大可以存储的元素数量
// shrink_to_fit() 将内存减少到等于当前元素数量所需的大小
// cbegin() 返回指向队列头部的常量迭代器
// cend() 返回指向队列尾部的常量迭代器

#include <iostream>
#include <deque>

int main()
{
    std::deque<int> dq;

    dq.push_back(1);  // 在队列尾部插入元素
    dq.push_front(2); // 在队列头部插入元素

    std::cout << "Front: " << dq.front() << std::endl; // 访问队列头部元素
    std::cout << "Back: " << dq.back() << std::endl;   // 访问队列尾部元素

    dq.pop_front(); // 删除队列头部元素
    dq.pop_back();  // 删除队列尾部元素

    std::cout << "Size: " << dq.size() << std::endl; // 队列的大小

    return 0;
}
