容器名称 说明
vector

典型的序列容器,C++标准严格要求次容器的实现内存必须是连续的,唯一可以和标准C兼容的stl容器,任意元素的读取、修改具有常数时间复杂度,在序列尾部进行插入、删除是常数时间复杂度,但在序列的头部插入、删除的时间复杂度是O(n),可以 在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。

本质上vector使用动态分配数组来存储它的元素,当新的元素插入时,这个数组需要被重新分配大小为了增加存储空间,其做法是:分配一个新数组,然后将全部元素移动到这个数组,就时间而言,代价高,因为每当一个新的元素加入到容器时

deque 序列容器,内存也是连续的,和vector相似,区别在于在序列的头部插入和删除操作也是常数时间复杂度, 可以 在任何位置插入新元素,有随机访问功能。
list  序列容器,内存是不连续的,任意元素的访问、修改时间复杂度是O(n),插入、删除操作是常数时间复杂度, 可以 在任何位置插入新元素。
set   关联容器,元素不允许有重复,数据被组织成一棵红黑树,查找的速度非常快,时间复杂度是O(logN)。

  • set以RBTree作为底层容器;
  • 所得元素的只有key没有value,value就是key;
  • 不允许出现键值重复;
  • 所有的元素都会被自动排序(中序遍历出来是有序的);
  • 不能通过迭代器来改变set的值,因为set的值就是键。
multiset
  • 关联容器,和set一样,区别是允许有重复的元素,具备时间复杂度O(logN)查找功能。
unordered_set
  • unordered_set它的实现基于HashTable;
  • 有unordered_set就一定有unordered_multiset,跟set和multiset一样,前者key不可以重复,后者key可以重复;
  • unordered_set是一种无序集合,既然跟底层实现基于HashTable那么它一定拥有快速的查找和删除、添加的优点.缺点是基于HashTable失去了基于rbtree的自动排序功能。
map  
  • 关联容器,按照{键,值}方式组成集合,按照键组织成一棵红黑树,查找的时间复杂度O(logN),其中键不允许重复,值可以重复;
  • map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中。所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的。顺序就是按照operator< 定义的大小排序;
  • 缺点: 空间占用率高,因为map内部实现了红黑树,虽然提高了运行效率,但是因为每一个节点都需要额外保存父节点、孩子节点和红/黑性质,使得每一个节点都占用大量的空间;
  • 适用处:对于那些有顺序要求的问题,用map会更高效一些。
multimap
  • 和map一样,区别是键可以重复。
unordered_map 
  • 优点: 因为内部实现了哈希表,因此其查找速度非常的快;
  • 缺点: 哈希表的建立比较耗费时间;
  • 适用处:对于查找问题,unordered_map会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map。
  • 对于map和unordered_map:内存占有率的问题就转化成红黑树 VS hash表 , 还是unorder_map占用的内存要高,但是unordered_map执行效率要比map高很多 。
  • unordered_set内部解决冲突采用的是----链地址法。
   

【校招面试 之 C/C++】第19题 C++ STL(一)的更多相关文章

  1. 【校招面试 之 网络】第3题 HTTP请求行、请求头、请求体详解

    1.HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE.HEA ...

  2. 【校招面试 之 网络】第2题 TCP的可靠传输、流量控制、滑动窗口

    1.可靠传输 (1)三次握手 TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接: (1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_S ...

  3. 【校招面试 之 网络】第1题 TCP和UDP

    TCP UDP1.TCP与UDP基本区别  (1)基于连接与无连接  (2)TCP要求系统资源较多,UDP较少:   (3)UDP程序结构较简单(头只有8个字节:源端口号.目标端口号.长度.差错)   ...

  4. 剑指offer 面试19题

    面试19题: 题目:正则表达式匹配 题:请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是 ...

  5. 记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮

    (出处:http://www.cnblogs.com/linguanh/) 前序: 距离  2016 腾讯 TST 校招面试结束已经5天了,3月27日至今,目前还在等待消息.从投简历到两轮电面,再到被 ...

  6. 墙裂推荐!2020Android阿里&腾讯&百度&字节&美团校招面试汇总

    基本情况 2021届硕士生,Android开发岗 此文主要是2020年年初春招实习的面试和正式校招面试经验汇总,最终校招拿到了腾讯,百度,美团等offer 主要包括阿里4面,腾讯实习4面和校招4面,字 ...

  7. WEB前端面试选择题解答(共36题)

    第1题 ["1", "2", "3"].map(parseInt) A:["1", "2", &qu ...

  8. UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用)

    UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用) 题意分析 绝对的好题. 先说做完此题的收获: 1.对数据结构又有了宏观的上的认识; 2.熟悉了常用STL ...

  9. 【校招面试 之 C/C++】第9题 C++多态

    C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数.如果对象类型是派生类,就调用派生类的函数:如果对象类型是基类 ...

随机推荐

  1. Linux Shell脚本编程--Linux特殊符号大全

    Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011

  2. 1009 Product of Polynomials (25 分)

    1009 Product of Polynomials (25 分) This time, you are supposed to find A×B where A and B are two pol ...

  3. json化的必要性

    参考文章:http://www.cnblogs.com/SanMaoSpace/p/3139186.html http://www.oschina.net/question/100267_61459

  4. png-CRC32校验

    官方文档: https://www.w3.org/TR/PNG-CRCAppendix.html CRC32校验的数据,看原文 A four-byte CRC (Cyclic Redundancy C ...

  5. sql server自增列值的获取

    IDENT_CURRENT(tbname) 是看表对象.所以没有受作用域限制. SCOPE_IDENTITY()  受作用域限制.同一个会话里面不同作用域也会有差异 @@IDENTITY  受会话限制 ...

  6. 46. linux下解压.tar.gz文件

    tar -zxvf jdk-7u55-linux-i586.tar.gz 步骤二:解压jdk-7u55-linux-i586.tar.gz ,执行以下命令: #mkdir /usr/local/jav ...

  7. 35. CentOS-6.3安装拼音输入法

    安装方法: su root yum install "@Chinese Support"      // 安装中文输入法 exit 装好后,在“系统-->首选项”就会看到有“ ...

  8. 1.JSONObject与JSONArray的使用

    参考文献: http://blog.csdn.net/huangwuyi/article/details/5412500 1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib ...

  9. indy字符编码

    以前是TEncoding.Unicode 现在是IndyTextEncoding_Default

  10. body 标签

    -图标 &nbsp(空格) -&gt(>) &lt(<) -p标签, 段落 <br \>  做换行 所有的标签分为: 块级标签: div(白板), H系 ...