嵌入式大厂面经 C++中STL常见面试题(持续更新中!)
这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!
C++中STL常见面试题
STL (Standard Template Library) 是C++标准库的重要组成部分,在面试中经常会被问到。以下是一些常见的STL相关面试题及其解答:
1. STL的基本组成部分
STL主要由六大组件组成:
- 容器(Containers):存储数据的数据结构
- 算法(Algorithms):操作容器中数据的方法
- 迭代器(Iterators):连接算法和容器的桥梁
- 函数对象(Functors):可以像函数一样被调用的对象
- 适配器(Adapters):修改其他组件接口的组件
- 分配器(Allocators):负责空间配置与管理
2. 常见容器及其特点
顺序容器
- vector:动态数组,支持随机访问,在尾部插入/删除元素效率高
- list:双向链表,支持双向顺序访问,在任何位置插入/删除效率都很高
- deque:双端队列,支持随机访问,在两端插入/删除效率高
关联容器
- set/multiset:基于红黑树实现的有序集合,set中元素唯一,multiset允许重复
- map/multimap:基于红黑树实现的键值对集合,map中键唯一,multimap允许重复键
无序容器(C++11)
- unordered_set/unordered_multiset:基于哈希表实现的无序集合
- unordered_map/unordered_multimap:基于哈希表实现的无序键值对集合
3. vector与list的区别
内存布局 |
连续存储 |
非连续存储(节点) |
随机访问 |
支持O(1) |
不支持 |
插入/删除 |
尾部O(1),中间O(n) |
任何位置都是O(1) |
迭代器失效 |
插入可能导致所有迭代器失效 |
只有被删除的元素的迭代器失效 |
4. map与unordered_map的区别
实现方式 |
红黑树 |
哈希表 |
元素顺序 |
按键排序 |
无序 |
查找复杂度 |
O(log n) |
平均O(1),最坏O(n) |
插入复杂度 |
O(log n) |
平均O(1),最坏O(n) |
内存消耗 |
较少 |
较多 |
5. STL迭代器种类
- 输入迭代器:只读,单向,一次性遍历
- 输出迭代器:只写,单向,一次性遍历
- 前向迭代器:可读写,单向,多次遍历
- 双向迭代器:可读写,双向,多次遍历
- 随机访问迭代器:可读写,双向,多次遍历,支持随机访问
6. vector的内存管理
// vector扩容机制示例 vector<int> v; cout << "初始容量: " << v.capacity() << endl; for(int i = 0; i < 10;
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。