zoukankan      html  css  js  c++  java
  • 16.4.5 容器种类(下:序列)

    七种STL容器类型:

    1. deque
    2. forward_list // C++11
    3. list
    4. queue
    5. priority_queue
    6. stack
    7. vector

    以上都是序列。

    ### 序列概念增加了迭代器至少是正向迭代器这样的要求,这保证了元素将按特定顺序排列,不会在两次迭代之间发生变化。

    ### 序列还要求其元素按严格的线性顺序排列,即存在第一个元素、最后一个元素,除第一个元素和最后一个元素外,每个元素

    ### 前后都分别有一个元素

    序列的要求

    表达式 返回类型 说明
    X a(n, t);   声明一个名为a的由n个t值组成的序列
    X(n, t);   创建一个由n个t值组成的匿名序列
    X a(i, j)   声明一个名为a的序列,并将其初始化为区间[i, j)的内容
    X(i, j)   创建一个匿名序列,并将其初始化为区间[i, j)的内容
    a.insert(p, t) 迭代器 将t插入到p的前面
    a.insert(p, n, t) void 将n个t插入到p的前面
    a.insert(p, i, j) void 将区间[i, j)中的元素插入到p的前面
    a.erase(p) 迭代器 删除p指向的元素
    a.erase(p, q) 迭代器 删除区间[p, q)中的元素
    a.clear() void 等价于erase(begin(), end())

    模板类:

    1. deque
    2. list
    3. queue
    4. priority_queue
    5. stack
    6. vector

    都是序列概念的模型,故均支持上表运算符。此外,这六个模型中的一些还支持其它操作。在

    允许的条件下,它们的复杂度为固定时间:

    序列的可选要求

    表达式 返回类型 含义 容器
    a.front() T& *a.begin() vector、list、deque
    a.back() T& *--a.end() vector、list、deque
    a.push_front(t) void a.insert(a.begin(), t) list、deque
    a.push_back(t) void a.insert(a.end(), t) vector、list、deque
    a.pop_front(t) void a.erase(a.begin()) list、deque
    a.pop_back(t) void a.erase(--a.end()) vector、list、deque
    a[n] T& *(a.begin() + n) vector、deque
    a.at(t) T& *(a.begin() + n) vector、deque

    ### 说明:a[n]和a.at(n)都返回指向容器中第n个元素的应用;差别在于,如果n落在容器的有效区间外,

    ### 则a.at(n)将执行边界检查,并引发out_of_range异常。

    ### 此外,表中a.ushi_front(t)没有涉及vector容器的原因是在vector的前面插入新值将导致前面添加的值位置后移,

    ### 故复杂度是线性时间,而上表仅考虑为固定时间的情况

  • 相关阅读:
    linux 查看安装软件位置(持续跟新)
    POJ 3661 Running (DP思想)
    stringstream的用法
    关于实验室搬家
    POJ 搜索(2)
    Treap的插入删除实现
    碰到一道不错的扩展欧几里德题目 whu 1338
    SRM 144
    关于无向图双连通问题
    POJ 动态规划(2)
  • 原文地址:https://www.cnblogs.com/suui90/p/13547716.html
Copyright © 2011-2022 走看看