容器选用场景

  • 顺序容器

    容器名称 初始化 赋值 元素存取 大小 插入和删除 扩展
    string 默认 带参数 拷贝 运算符重载 = /.assgin(){2种} [] /.at() size(),strlen(),empty() insert() erase() clear() 拼接:+/append() 查找: find()/rfind() 替换:replace() 子串: substr() 比较: compare()
    vector 默认 带参数 拷贝 运算符重载 = /.assgin() {2种} [] /.at() size(),resize(),reserve(),capacity(),empty() push_back() pop_back() insert(){2种} erase(){2种} clear()  
    deque 默认 带参数 拷贝 运算符重载 = /.assgin(){2种} [] /.at() size() resize() empty() push_front() pop_front() push_back() pop_back() insert(){2种} erase(){2种} clear()  
    list 默认 带参数 拷贝 运算符重载 = /.assgin(){2种} 只有迭代器,不能随机存取 size() resize() empty() push_front() pop_front() push_back() pop_back() insert(){2种} erase(){2种} clear()  
    stack 5 方法 push() pop() top() size() empty()
    queue 6 方法 push() pop() front() back() size() empty()

  • 关联型容器

    容器名称 初始化 赋值 元素存取 大小 插入和删除 查找
    set 默认 拷贝 运算符重载 = iterator且不能用iterator改变容器中的值 size() empty() insert(ele) erase(){3种} clear() find() upper_bound() lower_bound() equal_range()
    multiset 同上multiset允许set容器中元素值重复          
    map 默认 拷贝 运算符重载 = [] iterator且不能用iterator改变容器中的值 size() empty() insert(pair<class T,class T> (xx,xx)) insert(make_pair(xx,xx)) insert(map<class T, class T>:: value_type(xx,xx)) erase(){3种} clear()  
    multimap 同上multimap允许map容器中key值重复          

  • STL容器使用时机

  • 容器 vector deque list set multiset map multimap
    结构 单端数组 双端数组 双向链表 二叉树 二叉树 二叉树 二叉树
    随机存取 no no no 对key:可 no
    元素搜索 很慢 对key:快 对key:快
    元素插入 末端 首尾两段 任意位置 - - - -
           deque 的使用场景: 比如排队购票系统, 对排队者的存储可以采用 deque, 支持头
    端的快速移除, 尾端的快速添加。 如果采用
    vector, 则头端移除时, 会移动大量的
    数据, 速度慢。
           vector deque 的比较:
           一: vector.at()deque.at()效率高, 比如 vector.at(0)是固定的, deque 的开始位置却
    是不固定的。
           二: 如果有大量释放操作的话, vector 花的时间更少, 这跟二者的内部实现有关。
           三: deque 支持头部的快速插入与快速移除, 这是 deque 的优点。
           list 的使用场景: 比如公交车乘客的存储, 随时可能有乘客下车, 支持频繁的不确实
    位置元素的移除插入

           set 的使用场景: 比如对手机游戏的个人得分记录的存储, 存储要求从高分到低分的
    顺序排列。
           map 的使用场景: 比如按 ID 号存储十万个用户, 想要快速要通过 ID 查找对应的用
    户。 二叉树的查找效率, 这时就体现出来了。 如果是
    vector 容器, 最坏的情况下可
    能要遍历完整个容器才能找到该用户



猜你喜欢

转载自blog.csdn.net/ukston_c/article/details/80634707