浅谈:C++STL容器

C++STL容器分为序列式容器、关联式容器、无序关联式容器,依次介绍如下:

1、序列式容器

(1)vector(动态数组)

特点:在内存中存储空间连续,因此支持时间复杂度为O(1)的随机访问,但插入删除操作复杂度为O(n);

常用操作:push_back()、pop_back()

(2)list(双向链表)

特点:插入删除复杂度为O(1),支持头插和尾插,不支持随机访问;

常用操作:insert()、erase()

forward_list:单向链表,不常用;

(3)deque(双端队列)

特点:结合数组与链表优势,底层实现由多个分段连续的内存空间组成,近似随机访问,同时支持高效的头尾插入删除操作,

中间插入删除操作仍然效率较低;

常用操作:push_back()、pop_back()、push_front()、pop_front()

2、关联式容器(有序)

(1)set(集合)

特点:存储唯一元素的容器,自动排序,基于红黑树实现,查找、插入、删除复杂度为O(logn);

multiset:多重集合,允许元素重复;

常用操作:insert()、erase();迭代器:find();

(2)map(映射/字典)

特点:存储键值对,按键排序,键唯一,基于红黑树实现,查找、插入、删除复杂度为O(logn);

multimap:多重映射,允许键重复;

常用操作:map_name["key"] = value;

3、无序关联式容器

unordered_set(无序集合)、unordered_map(无序映射)

特点:基于哈希表实现,元素无序,查找、插入、删除操作复杂度最好O(1),最坏O(n),哈希函数计算完入桶,

桶中数据结构通常为来链表或红黑树;

全部评论

相关推荐

10-16 11:02
已编辑
哈尔滨工程大学 C++
part1.自我介绍;part2:项目:将一个你最熟悉的项目(讲了项目A在车企·域控器的OTA)服了,撞枪口上了 ,他刚好是做这一块的;疯狂深挖;(1)你们控制板的主控芯片是哪一个?为什么要以这种方式实现监控?刷写逻辑是什么?A/B区切换逻辑?(2)主控并发获取系统快照写入缓存以后,主线写入日志过程是写入主控日志还是系统日志?如果是写入主控日志,你这种实现在多写入场景下的时间和原有时间帧能同步吗?怎么同步?(3)刚刚你提到了线程池的入口函数的封装和信号量触发,在哪里触发?线程池的实现的源码有看吗?基于什么实现的?(4)你们的开发是基于AutoSar还是自己的编译环境?有没有兼容autosar的服务?怎么实现的?(5)实际项目中有涉及过中断操作吗?(6)像你所说的缓存写入日志的场景如果出现异常或是掉电程序崩溃时你针对缓存数据和日志系统有什么兜底措施吗?怎么实现?回滚的策略是什么?part3:场景八股(1)说一个熟悉的stl容器,底层是基于什么实现的?是线程安全的吗?你在什么场景下会用到这个数据结构?插入和删除的时间的复杂度是多少?查找的时间复杂度呢?(2)将一下lambda表达式有哪些参数可选;各自实现什么功能?你刚刚提到的了返回值自动类型推导,之前还有个mutable参数是什么功能?可以输入什么数据类型?(mutable 默认:值捕获的变量在 lambda 内是 const 的,不能修改。加 mutable:允许修改值捕获的变量副本(不影响外部)。)(3)用过智能指针吗?讲一个项目中用到的场景?有什么优缺点?shared_ptr的引用计数的数据类型是什么?(4)刚刚你提到了熟悉多线程编程,我这里有两个线程,线程A获取锁执行某一模块功能,线程B同理;同时只能由一个线程获取锁,当前内部功能的实现超出预期,线程A不释放锁;如何在线程A功能不受损的情况下让线程B按照原有时序预期获取锁?只用锁操作;(描述有一点点问题,因为最后答案还是设置超时机制强制释放锁);(5)了解UDS服务和CAN通信吗?反问,公司部门业务(车联网应用)工作作息;面试官太专业,语气温和,面试虽然答得依托但是体验狠好;
查看12道真题和解析
点赞 评论 收藏
分享
头像
10-17 09:10
已编辑
东南大学 C++
10.16早上中兴通信终试洽谈,大概给自己整理一下问的问题,就当做给自己复盘了来接我的HR过来发现就是宣讲会的时候线下收我的简历的那个,终试其实就是部门面,相当于以后那个大姐就是我的同事。有点小小惊讶说实话。然后就是经典的面试前寒暄两句。0、先掏材料,也就是你的成绩单,我给他看了我的本科成绩单和硕士成绩单。1、自我介绍2,随便挑了一个我写在上面的小项目,让你描述里面的逻辑3,你自己是用C++写的程序,让你描述一下你的接口,包括输入是什么,输出是什么。  上面两问是问语言表述能力4,职业规划是什么样的5,和对象有关的问题,包括和对象之间的未来规划、你们之间解决矛盾的逻辑、冷战的时候都是谁主动破除冷战、在关乎自己的问题上,决策权都是几几开,如果遇到了他找了北京的工作,你找了南京的工作怎么办6,你对我们公司有哪一些了解这里我有提到社会评价,7问顺着这个问7,你说社会评价都很高,就没有一些负面的评价嘛?8,为什么选择我们,你找工作的逻辑点在哪里9,别人对你是怎么评价的10、你有做过一些社会性的工作嘛?--当过部长11、在你承担这种部长的时候,可能会有一些人因为自己的一些情况会有不能参加的情况,你会怎么解决--这个问题我答完感觉面试官不是很满意,因为我做的那个部长对应的组织本身就是公益性质的,部员都是自愿来的,你没理由强迫他们做这些事情。所以接着后面一问。12、在你的工作期间你怎么处理你的成员中有一些消极怠工的情况13、有没有做过数通相关的项目这里我说完开始介绍起业务了,说他们主要做三层协议这块包括像你之前说的OSPF,二层协议像你说的VLAN我们不怎么做。14,别人评价你是什么样的人。15,你在做奉献的时候,你不会觉得亏之类的嘛?16、期望薪资?声明:上述所有问题顺序可能不对反问:1,网上有提到这个晋升涉及到积分制度,满足一定积分才能申请晋升,那我如果接手了一个两年期的项目是不是就两年内和晋升无缘了?2,什么时候可以开始接手一些项目,哪怕是边缘一些的工作。能记起来的差不多这些总之上次HW面试挂了之后系统性做了一些开放问题的整理还是有一些用的,面完之后能看懂面试官在问这些问题的背后想要知道什么。最后,开始长达一个礼拜的许愿吧————————————————复盘一下感觉搜的东西有一些片面,得拓宽一些搜索渠道
查看16道真题和解析
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务