C++岗位求职面试八股文第十一篇

文章详细介绍了STL中的各种容器,如vector、deque、list、map、set等的底层实现方式和操作时间复杂度。重点讨论了迭代器的使用、失效情况以及在不同容器中的行为。此外,还对比了vector和list、map和unordered_map的区别,并提到了resize和reserve的区别以及动态链接库中使用STL容器可能遇到的问题。
摘要由CSDN通过智能技术生成

系列文章目录

第一篇:语言基础
第二篇:设计模式
第三篇:数据库
第四篇:计算机网络
第五篇:操作系统
第六篇:LInux
第七篇:数据结构
第八篇:智力题

[201]谓词概念

在这里插入图片描述

[202]内建函数对象

链接
内建函数对象:仿函数(算术、逻辑、关系仿函数)
在这里插入图片描述

[203]STL 容器用过哪些,查找的时间复杂度是多少,为什么?

STL中常用的容器有vector、deque、list、 map、set、multimap、multiset、unordered_map、unordered_set、 stack、queue等。容器底层实现方式及时间复杂度分别如下:
vector
采用一维数组实现,元素在内存连续存放,不同操作的时间复杂度为:
插入: O(N)
查看: O(1)
删除: O(N)
deque
采用双向队列实现,元素在内存连续存放,不同操作的时间复杂度为:
插入: O(N)
查看: O(1)
删除: O(N)
list
采用双向链表实现,元素存放在堆中,不同操作的时间复杂度为:
插入: O(1)
查看: O(N)
删除: O(1)
map、set、multimap、multiset
上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种(自平衡二叉搜索树)。不同操作的时间复杂度近似为:
插入: O(logN)
查看: O(logN)
删除: O(logN)
unordered_map、unordered_set、unordered_multimap、 unordered_multiset
上述四种容器采用哈希表实现,不同操作的时间复杂度为:
插入: O(1),最坏情况O(N)
查看: O(1),最坏情况O(N)
删除: O(1),最坏情况O(N)
注意:容器的时间复杂度取决于其底层实现方式。

[204]迭代器用过吗?什么时候会失效

总结:迭代器失效分三种情况考虑,也是非三种数据结构考虑,分别为数组型,链表型,树型数据结构。
数组型数据结构:对于序列容器vector,deque,该数据结构的元素是分配在连续的内存中,insert和erase操作,都会使得删除点和插入点之后的元素挪位置,所以,插入点和删除掉之后的迭代器全部失效,也就是说insert(*iter)(或erase(*iter)),然后在iter++,是没有意义的。解决方法:erase(*iter)的返回值是下一个有效迭代器的值。 iter =cont.erase(iter);
所以不能使用erase(iter++)的方式,还好erase,insert方法可以返回下一个有效的iterator。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
链表型数据结构:对于list型的数据结构,使用了不连续分配的内存,删除运算使指向删除位置的迭代器失效,但是不会失效其他迭代器.解决办法两种,erase(*iter)会返回下一个有效迭代器的值,或者erase(iter++).

树形数据结构: 使用红黑树来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT与Fintech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值