【个人纪录】C++面试总结之四(STL)

早过忘川 提交于 2020-12-10 08:16:58

不严谨之处较多,欢迎指正,在学习的路上不断狂奔

在C++的面试中,标准模板库(STL)的使用是绕不开的一个话题。这次就把关于STL的几个重要常用容器的区别及使用场景总结一下,以便后面查看。

注:每个容器的使用细节这篇不过多描述,毕竟面试过程以表达为主,若想深入了解,可查看我的博客专栏【STL】,每个容器都单独进行了总结。

正文开始:
一、项目中常用的容器:
1、序列式容器:
vector:向量容器【底层是内存可自动增长的数组】
list:双向链表容器(底层是双向链表)
deque:双端队列容器(底层是动态开辟的二维数组)




2、关联式容器:
底层是红黑树(集合和映射表,时间复杂度为o(log2n))
map:单重映射表 key<->value
set:单重集合 key


二、适用的场景:
1、vector,向量,封装了数组。内部实为一个指针指向一块连续的空间,当空间被放满时,会自动申请一块更大的空间,将原有的所有数据拷贝过来,并将上一块空间释放掉。由于是一块连续的空间,故可以用下标访问的方式进行随机访问。若项目中需要进行高频率的访问,则可以优先考虑vector。

2、list,双向链表,是由一系列结点组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。list容器不仅是一个双向链表,而且是一个循环的双向链表。List将元素按顺序储存在链表中,与 向量(vector)相比, 它允许快速的插入和删除,但是随机访问却比较慢。若项目中需要进行频繁的插入删除数据,则可以优先考虑list。

3、deque,为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。若项目中既要高频率访问又要频繁的插入删除数据,二者都要兼顾,那么deque就是较好的选择。

4、map,以键值对的形式存储,红黑树作为底层容器,所有元素都是通过键进行自动排序的,其中键不可重复且不可修改,但值可重复且可修改。map支持快速查找与删除,若项目中有类似于键值形式存储关系的数据时,可优先考虑用map。

5、set,只有键没有值,值就是键,和map一样也是以红黑树为底层容器,所有元素都不同且进行自动排序,set的值不能被更改,因为值就是键!set也支持快速查找与删除,与map一个很大的区别是【去重】,map的值可重复,而set的值不能重复,故以次可以作为选用set与map的判断点,若项目中选用关联式容器有去重需求时,则优先考虑set。

三、未完,待续。。。

结束:

分享也是自己对问题再次加深理解的方式,可能不全面,但绝对有用,后面将不断完善~

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!