【秋招】嵌入式面试八股文- 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。八股文本质是需要大家理解,因此里面的内容一定要详细、深刻!这个专栏是我个人的学习笔记总结,是对很多面试问题进行的知识点分析,专栏保证高质量,让大家可以高效率理解与吸收里面的知识点!掌握这里面的知识,面试绝对无障碍!

全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务