zoukankan      html  css  js  c++  java
  • STL总结

    • 容器:一种数据结构,以模板类的方式提供;(存储数据对象)
    • 算法:用于操作容器中数据的模板函数;(对数据进行处理)
    • 迭代器:提供了访问容器中对象的方法;(相当于指针)

           迭代器是容器和算法交互的桥梁;

     1、序列容器和关联容器

     

    序列容器

    关联容器

     

    vector

    deque

    list

    set

    multiset

    map

    multimap

    名称

    向量容器

    双端队列容器

    列表容器

    集合

    多重集合

    映射

    多重映射

    内部数据

    结构

    连续存储的数组(末端开口的数组)

    连续或分段连续存储的数组(两端开口的数组)

    双向链表

    红黑树(平衡检索二叉树)

    红黑树

    红黑树

    红黑树

    结构

    线性结构

    线性结构

    线性结构

    非线性

    非线性

    非线性

    非线性

    头文件

    <vector>

    <deque>

    <list>

    <set>

    <set>

    <map>

    <map>

    操作元素方式

    下标运算符;可以用迭代器但插入、删除操作时会失效

    下标运算符;

    迭代器;

    只能用迭代器

    迭代器

    迭代器

    迭代器

    迭代器

    特点

     

    增加和获取元素效率很高;插入和删除元素效率很低;

    增加和获取元素效率较高;

    插入和删除效率很高

    增加和获取元素效率很低;插入和删除的效率很高;

    (关键字)和值(数据)相等;键唯一;元素默认按升序排列

    键和值相等;键可以不唯一;元素默认可以不唯一;

    键和值分开(模板有两个参数);键唯一;元素默认按照键升序排列;

    键和值分开;键可以不唯一;元素默认按键的升序排列;

    优缺点

    查询和末端添加元素性能好;

    在中间插入和删除元素性能差;

    兼顾数组和链表的优点,比list查询性能好,比vector插入和删除性能好

    插入和删除元素性能好;

    查询性能差

    元素的值唯一;

    自动被排序;

    元素值不能改变;

    元素的值不唯一;

    自动被排序;

    元素值不能改变;

    键值唯一;

    键值自动被排序;

    键值不唯一;

    键值自动排序;

    综合比较

    1、关联容器对元素的插入和删除操作比vector 要快,因为vector 是顺序存储,而关联容器是链式存储;比list 要慢,是因为即使它们同是链式结构,但list 是线性的,而关联容器是二叉树结构,其改变一个元素涉及到其它元素的变动比list 要多,并且它是排序的,每次插入和删除都需要对元素重新排序;

    2、关联容器对元素的检索操作比vector 慢,但是比list 要快很多。vector 是顺序的连续存储,当然是比不上的,但相对链式的list 要快很多是因为list 是逐个搜索,它搜索的时间是跟容器的大小成正比,而关联容器 查找的复杂度基本是Log(N) ,比如如果有1000 个记录,最多查找10 次,1,000,000 个记录,最多查找20 次。容器越大,关联容器相对list 的优越性就越能体现;

    2、容器适配器

     

    容器适配器

    stack

    queue

    priority_queue

    名称

    队列

    优先级队列

    内部数据结构

     底层默认使用deque的数据结构,将一端封闭,实现先进后出的行为。

     底层默认使用deque的数据结构,封闭低端的出口和顶端的入口,实现先进先出(从底端入,从顶端出)的性质。

    带权队列,queue中的元素不是按照被推入的次序排列,而是按照元素的权值(实值)排列,权值最高的,排在最前面。默认情况下底层使用max_heap(以vector)实现以“权值高低自动排序”的特性。

    头文件

    <stack>

    <queue>

    <queue>

    特点

    先进后出:只能在顶端插入、删除和取得元素,所以不允许进行遍历,没有迭代器。

    先进先出:只能从队尾插入元素,从队首删除元素,所以也不允许遍历行为。没有迭代器。

    在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。与queue一样,qriority_queue不提供遍历的功能,也不提供迭代器。

    适配器是容器的接口,它本身不能直接保存元素,它保存元素的机制是调用另一种顺序容器去实现,即可以把适配器看作“它保存一个容器,这个容器再保存所有元素”。

    3、STL成员函数对比

     

    Sequence containers

    Associative containers

    Headers

    <vector>

    <deque>

    <list>

    <set>

     <map>

    Members

    complex

    vector

    deque

    list

    set

    multiset

    map

    multimap

     

    constructor

    *

    constructor

    constructor

    constructor

    constructor

    constructor

    constructor

    constructor

    destructor

    O(n)

    destructor

    destructor

    destructor

    destructor

    destructor

    destructor

    destructor

    operator=

    O(n)

    operator=

    operator=

    operator=

    operator=

    operator=

    operator=

    operator=

    iterators

    begin

    O(1)

    begin

    begin

    begin

    begin

    begin

    begin

    begin

    end

    O(1)

    end

    end

    end

    end

    end

    end

    end

    rbegin

    O(1)

    rbegin

    rbegin

    rbegin

    rbegin

    rbegin

    rbegin

    rbegin

    rend

    O(1)

    rend

    rend

    rend

    rend

    rend

    rend

    rend

    capacity

    size

    *

    size

    size

    size

    size

    size

    size

    size

    max_size

    *

    max_size

    max_size

    max_size

    max_size

    max_size

    max_size

    max_size

    empty

    O(1)

    empty

    empty

    empty

    empty

    empty

    empty

    empty

    resize

    O(n)

    resize

    resize

    resize

     

     

     

     

    element access

    front

    O(1)

    front

    front

    front

     

     

     

     

    back

    O(1)

    back

    back

    back

     

     

     

     

    operator[]

    *

    operator[]

    operator[]

     

     

     

    operator[]

     

    at

    O(1)

    at

    at

     

     

     

     

     

    modifiers

    assign

    O(n)

    assign

    assign

    assign

     

     

     

     

    insert

    *

    insert

    insert

    insert

    insert

    insert

    insert

    insert

    erase

    *

    erase

    erase

    erase

    erase

    erase

    erase

    erase

    swap

    O(1)

    swap

    swap

    swap

    swap

    swap

    swap

    swap

    clear

    O(n)

    clear

    clear

    clear

    clear

    clear

    clear

    clear

    push_front

    O(1)

     

    push_front

    push_front

     

     

     

     

    pop_front

    O(1)

     

    pop_front

    pop_front

     

     

     

     

    push_back

    O(1)

    push_back

    push_back

    push_back

     

     

     

     

    pop_back

    O(1)

    pop_back

    pop_back

    pop_back

     

     

     

     

    observers

    key_comp

    O(1)

     

     

     

    key_comp

    key_comp

    key_comp

    key_comp

    value_comp

    O(1)

     

     

     

    value_comp

    value_comp

    value_comp

    value_comp

    operations

    find

    O(log n)

     

     

     

    find

    find

    find

    find

    count

    O(log n)

     

     

     

    count

    count

    count

    count

    lower_bound

    O(log n)

     

     

     

    lower_bound

    lower_bound

    lower_bound

    lower_bound

    upper_bound

    O(log n)

     

     

     

    upper_bound

    upper_bound

    upper_bound

    upper_bound

    equal_range

    O(log n)

     

     

     

    equal_range

    equal_range

    equal_range

    equal_range

    unique members

     

    capacity 
    reserve

     

    splice
    remove
    remove_if
    unique
    merge
    sort 
    reverse

     

     

     

     

  • 相关阅读:
    VS code 快捷键注释不能用[!----]解决办法
    vue 文件导出demo
    vue中后台返回的是数字,前端利用字典将其转换为相对应的中文
    java.lang.UnsupportedOperationException解决方法【转】
    Java List的remove()方法陷阱
    密码至少包含数字、大小写字母、特殊字符两种以上,长度不小于8位
    获取规格内数字
    获取时间段数据
    Echarts GL初次体验
    bootstrap-datetimepicker 如何获取值(日期)
  • 原文地址:https://www.cnblogs.com/dingou/p/11426984.html
Copyright © 2011-2022 走看看