【八股】基于STL实现的笔试题常考七大基本数据结构

【八股】基于STL实现的笔试题常考七大基本数据结构

上篇文章 详细介绍了九大数据结构,了解后可以与面试官侃侃而谈了。但是没有与常见题目和具体实现结合,如果面试官要求你手动实现,也需要至少会写出最常见的几种。作为C++选手,我在刷题过程中总结了常考的数据结构的特点,并结合最近阅读的《C++ Primer》、《代码随想录》,介绍了用STL模板库(一般指 SGI STL版本)具体实现的注意事项。本文可以作为准备面试的材料。

下面文章是在《代码随想录》和《labuladong的算法笔记》题目中的具体实践:
【笔记】数组
【笔记】链表
【笔记】哈希表
【笔记】字符串
【笔记】栈与队列
【笔记】二叉树

0、STL 容器总结

六大顺序容器

容器名称 特点说明
vector 可变大小数组。支持快速随机访问。在尾部之外的位置插入、删除元素可能很慢。
deque 双端队列。支持快速随机访问。在头、尾位置插入、删除元素速度很快。
list 双向链表。只支持双向顺序访问。在list中任何位置插入、删除操作速度都很快。size时间复杂度O(n)。
forward_list 单向链表。只支持单向顺序访问。在forward_list中任何位置插入、删除操作速度都很快。没有size操作。
array 固定大小数组。支持快速随机访问。不能添加、删除元素。
string 与vector相似,但只保存字符。支持快速随机访问。在尾部位置插入、删除元素速度快。
注意:
  • 现代C++程序应使用标准库容器
  • 两个不同容器赋值,注意灵活使用构造函数。一般参数是首begin、尾end迭代器,而不是用for遍历元素然后插入;两个相同容器赋值,可用初始化语句把另一个容器整个拷贝过来
  • vector是最优解,除非有更好的理由使用别的容器
  • deque也可以用下标随机访问,但并非连续存储,其元素地址不连续
  • 除list外,size的时间复杂度O(1),forward_list没有size操作
  • 只有顺序容器(array除外)的构造函数才能接受大小参数
  • 当不需要写访问时,迭代器应使用cbegin和cend
  • 向一个string,vector和deque插入元素,会使得所有指向容器的迭代器、引用和指针失效
  • emplace_back直接在容器的内存空间创建对象,而push_back是先创建临时对象,然后压入容器,前者效率更高一些

三大顺序容器适配器

容器适配器名称 说明
stack 栈。默认底层容器是deque,也可构造于除array,forward_list的其他容器之上。
queue 队列。默认底层容器是deque,也可构造于list之上。不能用vector,因为不支持删除首元素。
priority_queue 优先级队列。常被用来实现堆。默认底层容器是vector,也可构造于deque之上。不能用list,因为不能随机访问。
注意:
  • 所有适配器,不能构造于array(不能添加、删除),forward_list(不能直接访问尾元素)之上
  • 适配器的功能决定其底层的容器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值