STL 双端队列

template<class T, class A = allocator<T> >
class deque {
public:
    //类型定义
    typedef A allocator_type;
    typedef A::size_type size_type;
    typedef A::difference_type difference_type;
    typedef A::reference reference;
    typedef A::const_reference const_reference;
    typedef A::value_type value_type;
    typedef T0 iterator;
    typedef T1 const_iterator;
    typedef reverse_iterator<iterator, value_type,
        reference, A::pointer, difference_type>
        reverse_iterator;
    typedef reverse_iterator<const_iterator, value_type,
        const_reference, A::const_pointer, difference_type>
        const_reverse_iterator;
    //构造函数
    explicit deque(const A& al = A());
    explicit deque(size_type n, const T& v = T(), const A& al = A());
    deque(const deque& x);
    deque(const_iterator first, const_iterator last,
        const A& al = A());

    //返回第一个开始元素迭代
    iterator begin();
    const_iterator begin() const;

    //返回结束尾后元素迭代器
    iterator end();
    iterator end() const;

    //返回反向开始元素迭代
    reverse_iterator rbegin();
    const_reverse_iterator rbegin() const;

    //返回反向尾后迭代
    reverse_iterator rend();
    const_reverse_iterator rend() const;

    //中心分配大小
    void resize(size_type n, T x = T());
    //返回元素个数
    size_type size() const;
    //返回元素最大容量
    size_type max_size() const;
    //如果队列为空返回false
    bool empty() const;
    A get_allocator() const;

    //获取指定位置元素
    reference at(size_type pos);
    const_reference at(size_type pos) const;

    //重载[]运算符
    reference operator[](size_type pos);
    const_reference operator[](size_type pos);

    //返回首元素引用
    reference front();
    const_reference front() const;

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

    //队头压入元素
    void push_front(const T& x);
    //队头弹出元素
    void pop_front();

    //队尾压入元素
    void push_back(const T& x);
    //队尾弹出元素
    void pop_back();

    //清空原队列,根据指定容器进行
    void assign(const_iterator first, const_iterator last);
    void assign(size_type n, const T& x = T());

    //插入元素
    iterator insert(iterator it, const T& x = T());
    void insert(iterator it, size_type n, const T& x);
    void insert(iterator it,
        const_iterator first, const_iterator last);

    //删除元素
    iterator erase(iterator it);
    iterator erase(iterator first, iterator last);

    //清空
    void clear();
    //交换
    void swap(deque x);
protected:
    A allocator;
};

猜你喜欢

转载自blog.csdn.net/timeinsist/article/details/78474403
今日推荐