STL笔试面试题总结(干货)

本文总结了STL的六大组件,包括容器、算法、迭代器、仿函数、容器配接器和空间配置器,深入讲解了常用容器如vector、list、deque的特性和底层机制,以及它们在插入删除操作中的效率差异。还探讨了迭代器的工作原理和失效情况,并对比了vector和list在不同场景下的使用选择。此外,文章讨论了map和set的实现、效率以及与hash_map的区别。
摘要由CSDN通过智能技术生成

STL笔试面试题总结

一.STL有哪些组件?

STL提供六大组件彼此此可以组合套用:

1、容器
容器就是各种数据结构,我就不多说,看看下面这张图回忆一下就好了,从实现角度看,STL容器是一种class template。

2、算法
各种常见算法,如sort,search,copy,erase等,我觉得其中比较值得学习的就是sort,next_permutation,partition,merge sort,从实现角度看,STL算法是一种function template。

3、迭代器
扮演容器与算法之间的胶合剂,是所谓的“泛型指针”。共有五种类型,从实现角度看,迭代器是一种将operator*,operator->,operator++,operator--等指针相关操作予以重载的class template。所有STL容器都附带有自己专属的迭代器,只有容器设计者才知道如何设计迭代器。原生指针也是一种迭代器。是设计模式的一种,所以被问到了解的设计模式可以用来凑数。

4、仿函数
行为类函数,可作为算法的某种策略,从实现角度看,仿函数是一种重载了operator()的class或class template。一般函数指针可视为狭义的仿函数。

5、容器配接器
一种用来修饰容器或者仿函数或迭代器接口的东西。比如queue和stack,看着像容器,其实就是deque包了一层皮。

6、空间配置器
负责空间配置与管理。从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放额class template。

二.STL常用的容器有哪些以及各自的特点是什么?

1.vector:底层数据结构为数组 ,支持快速随机访问。

2.list:底层数据结构为双向链表,支持快速增删。

3.deque:底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问。

4.stack:底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时

5.queue:底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限制,扩容耗时(stack和queue其实是适配器,而不叫容器,因为是对容器的再封装)

6.priority_queue:的底层数据结构一般为vector为底层容器,堆heap为处理规则来管理底层容器实现

7.set:底层数据结构为红黑树,有序,不重复。

8.multiset:底层数据结构为红黑树,有序,可重复。 

9.map:底层数据结构为红黑树,有序,不重复。

10.multimap:底层数据结构为红黑树,有序,可重复。

11.hash_set:底层数据结构为hash表,无序,不重复。

12.hash_multiset:底层数据结构为hash表,无序,可重复 。

13.hash_map :底层数据结构为hash表,无序,不重复。

14.hash_multimap:底层数据结构为hash表,无序,可重复。 

三、说说std::vector的底层(存储)机制。

     vector就是一个动态数组,里面有一个指针指向一片连续的内存空间,当空间不够装下数据时,会自动申请另一片更大的空间(一般是增加当前容量的50%或100%),然后把原来的数据拷贝过去,接着释放原来的那片空间;当释放或者删除里面的数据时,其存储空间不释放,仅仅是清空了里面的数据。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值