• STL之deque


    deque 和 vector 一样都是标准模板库中的内容, deque 是双端队列,在接口上和 vector 非常相似,在许多操作的地方可以直接替换。假如读者已经能够有效地使用vector 容器,下面提供 deque 的成员函数和操作,进行对比参考。

    Deque 成员函数

    函数

    描述

    c.assign(beg,end)

    c.assign(n,elem)

    将 [beg; end) 区间中的数据赋值给 c 。

    将 n 个 elem 的拷贝赋值给 c 。

    c.at(idx)

    传回索引 idx 所指的数据,如果 idx 越界,抛出out_of_range 。

    c.back()

    传回最后一个数据,不检查这个数据是否存在。

    c.begin()

    传回迭代器重的可一个数据。

    c.clear()

    移除容器中所有数据。

    deque c

    deque c1(c2)

    Deque c(n)

    Deque c(n, elem)

    Deque c(beg,end)

    c.~deque()

    创建一个空的 deque 。

    复制一个 deque 。

    创建一个 deque ,含有 n 个数据,数据均已缺省构造产生 。

    创建一个含有 n 个 elem 拷贝的 deque 。

    创建一个以 [beg;end) 区间的 deque 。

    销毁所有数据,释放内存。

    c.empty()

    判断容器是否为空。

    c.end()

    指向迭代器中的最后一个数据地址。

    c.erase(pos)

    c.erase(beg,end)

    删除 pos 位置的数据,传回下一个数据的位置。

    删除 [beg,end) 区间的数据,传回下一个数据的位置 。

    c.front()

    传回地一个数据。

    get_allocator

    使用构造函数返回一个拷贝。

    c.insert(pos,elem)

    c.insert(pos,n,elem)

    c.insert(pos,beg,end)

    在 pos 位置插入一个 elem 拷贝,传回新数据位置。

    在 pos 位置插入 n 个 elem 数据。无返回值。

    在 pos 位置插入在 [beg,end) 区间的数据。无返回值。

    c.max_size()

    返回容器中最大数据的数量。

    c.pop_back()

    删除最后一个数据。

    c.pop_front()

    删除头部数据。

    c.push_back(elem)

    在尾部加入一个数据。

    c.push_front(elem)

    在头部插入一个数据。

    c.rbegin()

    传回一个逆向队列的第一个数据。

    c.rend()

    传回一个逆向队列的最后一个数据的下一个位置。

    c.resize(num)

    重新指定队列的长度。

    c.size()

    返回容器中实际数据的个数。

    C1.swap(c2)

    Swap(c1,c2)

    将 c1 和 c2 元素互换。

    同上操作。

    Deque 操作

    函数

    描述

    operator []

    返回容器中指定位置的一个引用。

    上面这些特征和 vector 明显相似,所以我们会提出下面的疑问。

    问题:如果 deque 和 vector 可以提供相同功能的时候,我们使用哪一个更好呢?

    回答:如果你要问的话,就使用 vector 吧。

    或者你给个解释?

    非常高兴你这样问,的确,这并不是无中生有的,事实上,在 C++ 标准里解释了这个问题,在 23.1.1SPAN >章节有下面一个片断:

    vector 在默认情况下是典型的使用序列的方法,对于 deque ,当使用插入删除操作的时候是一个更好的选择。

    有趣的是,本文就是要非常彻底地理解这句话。      

    什么是新的?

    细读上面两张表格,你会发现和 vector 比较这里增加了两个函数。

    1 、 c.push_front(elem) —— 在头部插入一个数据。

    2 、 c.pop_front() —— 删除头部数据。

    调用方法和 c.push_back(elem) 和 c.pop_back() 相同,这些将来会告诉我们对于 deque 会非常有用, deque 可以在前后加入数据。

  • 相关阅读:
    (转载)什么才是富人思维
    linux上的vs code的C++环境搭建
    [转载]双线性插值简介
    刻意练习行动手册
    滑动窗口技巧
    [转载]用于深入思考的小工具
    CF632E Thief in a Shop
    BZOJ1497 最大获利
    UVA10779 Collectors Problem
    洛谷P4311 士兵占领
  • 原文地址:https://www.cnblogs.com/pony1993/p/2685395.html
Copyright © 2020-2023  润新知