【秋招】嵌入式面试八股文- C++的STL库
【秋招】嵌入式面试八股文 - 最全专栏
1. STL的基本组成部分
STL主要由六大组件组成:
- 容器(Containers):存储数据的数据结构
- 算法(Algorithms):操作容器中数据的方法
- 迭代器(Iterators):连接算法和容器的桥梁
- 函数对象(Functors):可以像函数一样被调用的对象
- 适配器(Adapters):修改其他组件接口的组件
- 分配器(Allocators):负责空间配置与管理
2. 常见容器及其特点
2.1 顺序容器
- vector:动态数组,支持随机访问,在尾部插入/删除元素效率高
- list:双向链表,支持双向顺序访问,在任何位置插入/删除效率都很高
- deque:双端队列,支持随机访问,在两端插入/删除效率高
2.2 关联容器
- set/multiset:基于红黑树实现的有序集合,set中元素唯一,multiset允许重复
- map/multimap:基于红黑树实现的键值对集合,map中键唯一,multimap允许重复键
2.3 无序容器(C++11)
- unordered_set/unordered_multiset:基于哈希表实现的无序集合
- unordered_map/unordered_multimap:基于哈希表实现的无序键值对集合
3. vector与list的区别
vector |
list |
|
内存布局 |
连续存储 |
非连续存储 |
插入/删除 |
尾部O(1),中间O(n) |
任何位置都是O(1) |
随机访问 |
支持O(1) |
不支持 |
迭代器失效 |
插入可能导致所有迭代器失效 |
只有被删除的元素迭代器失效 |
4. map与unordered_map的区别
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; i++) { v.push_back(i); cout << "添加元素后容量: " << v.capacity() << endl; }
- vector在容量不足时会重新分配更大的内存空间
- 通常新容量是旧容量的1
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【秋招】嵌入式八股文最全总结 文章被收录于专栏
双非本,211硕。本硕均为机械工程,自学嵌入式,在校招过程中拿到小米、格力、美的、比亚迪、海信、海康、大华、江波龙等offer。八股文本质是需要大家理解,因此里面的内容一定要详细、深刻!这个专栏是我个人的学习笔记总结,是对很多面试问题进行的知识点分析,专栏保证高质量,让大家可以高效率理解与吸收里面的知识点!掌握这里面的知识,面试绝对无障碍!