zoukankan      html  css  js  c++  java
  • STL容器简介

    stl不是面向对象的编程,而是一种不同的编程模式————泛型编程

    我们常用到的STL容器有vector、list、deque、map、multimap、set、multiset

    顺序性容器:vector、deque、list
    关联性容器:set、multiset、map、multimap
    容器适配器:stack、queue

    verctor

      vector类似于动态数组,直接访问元素,从后面快速插入或者删除;
      vector类似于C语言中的数组,它维护一段连续的内存空间,具有固定的起始地址,因而能非常方便地进行随机存取,即 [] 操作符,但因为它的内存区域是连续的,所以在它中间插入或删除某个元素,需要复制并移动现有的元素。此外,当被插入的内存空间不够时,需要重新申请一块足够大的内存并进行内存拷贝。值得注意的是,vector每次扩容为原来的两倍,对小对象来说执行效率高,但如果遇到大对象,执行效率就低了。

    list

      可以从任何地方插入或者删除;
      类似于C语言中的双向链表,它通过指针来进行数据的访问,因此维护的内存空间可以不连续,这也非常有利于数据的随机存取,因而它没有提供 [] 操作符重载;

    deque

      是一个double-ended queue
      1)支持随即存取,也就是[]操作符,
      2)支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多

    stack

      1)可用 vector, list, deque来实现
      2)缺省情况下,用deque实现
      template<classT, class Cont = deque<T> >
      class stack { ….. };
      3)用 vector和deque实现,比用list实现性能好
      4)stack是后进先出的数据结构,
      5)只能插入、删除、访问栈顶的元素的操作: push: 插入元素pop: 弹出元素 top: 返回栈顶元素的引用

    map

      map类似于数据库中的1:1关系,它是一种关联容器,提供一对一(C++ primer中文版中将第一个译为键,每个键只能在map中出现一次,第二个被译为该键对应的值)的数据处理能力,这种特性了使得map类似于数据结构里的红黑二叉树。

    multimap

      类似于数据库中的1:N关系,它是一种关联容器,提供一对多的数据处理能力。

    set

      类似于数学里面的集合,不过set的集合中不包含重复的元素,这是和vector的第一个区别,第二个区别是set内部用平衡二叉树实现,便于元素查找,而vector是使用连续内存存储,便于随机存取。

    multiset

      类似于数学里面的集合,集合中可以包含重复的元素。

    小结

     在实际使用过程中,到底选择这几种容器中的哪一个,应该根据遵循以下原则:
    1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector;
    2、如果需要大量的插入和删除元素,不关心随机存取的效率,使用list;
    3、如果需要随机存取,并且关心两端数据的插入和删除效率,使用deque;
    4、如果打算存储数据字典,并且要求方便地根据key找到value,一对一的情况使用map,一对多的情况使用multimap;
    5、如果打算查找一个元素是否存在于某集合中,唯一存在的情况使用set,不唯一存在的情况使用multiset。

  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/xiaohexiansheng/p/8391477.html
Copyright © 2011-2022 走看看