C++11QT复习 (十四)
文章目录
-
- Day9 数据结构学习笔记(2025.04.01)
-
- 一、C++基础快速回顾
- 二、STL(标准模板库)
- 三、常见容器及其对应的数据结构
- 四、容器操作演示
-
- 1. 基本容器使用
- 2. 异构类型容器
- 五、迭代器详解
-
- 特点
- 示例
- 用户自定义结构体访问成员
- 六、算法库与排序演示
-
- STL算法特点
- 示例:排序
- C++20 ranges(了解)
- 七、完整测试代码
- 八、总结
Day9 数据结构学习笔记(2025.04.01)
一、C++基础快速回顾
- 内存模型
- 栈(stack)与堆(heap)分配
- 指针与引用(左值引用、右值引用、const 引用)
- 类型系统
- 内置类型与自定义类型
- 构造与析构(RAII)
- 拷贝与赋值(深拷贝/浅拷贝,共享/独占语义)
- 移动语义(C++11)
- 操作符重载
- 继承与多态(虚函数、RTTI)
- 模板
- 泛型编程基础
- 模板函数与模板类
二、STL(标准模板库)
STL由以下五个核心部分组成:
- 容器(Containers)
- 存储和管理数据结构(如数组、链表、哈希表、树等)
- 常见限制:不能使用引用类型或函数作为元素
- 迭代器(Iterators)
- 提供统一方式访问容器元素
- 本质行为类似指针(重载
*
,->
,++
,--
等)
- 算法(Algorithms)
- 提供常见操作如排序、查找、复制、删除等
- 与容器无关,仅依赖迭代器
- 函数对象与适配器
- 如
std::less
,可定制算法行为
- 如
- 工具类与API封装
- 如智能指针、时间、线程、文件系统等
三、常见容器及其对应的数据结构
容器 | 数据结构 | 特点 |
---|---|---|
std::array |
固定大小数组 | 编译期大小,栈分配 |
std::vector |
动态数组 | 支持随机访问,自动扩容 |
std::forward_list |
单向链表 | 内存使用少,不能反向遍历 |
std::list |
双向链表 | 可双向遍历,插入删除效率高 |
std::set/map |
红黑树(有序) | 元素有序,插入删除O(logn) |
std::unordered_set/map |
哈希表(无序) | 查询效率高,O(1)平均复杂度 |
std::stack |
栈(适配器) | LIFO,默认基于deque 实现 |
std::queue |
队列(适配器) | FIFO,默认基于deque 实现 |
std::priority_queue |
堆(适配器) | 默认大顶堆 |
std::deque |
双端队列 | 头尾高效插入删除 |
std::tuple / std::pair |
异构数据结构 | 用于存储不同类型的多个值 |
四、容器操作演示
1. 基本容器使用
std::array<int, 10> arr = {
}; // 固定数组
std::vector<int> vec; // 动态数组
std::forward_list<int> flist; // 单向链表
std::list<int> dlist; // 双向链表
std::set<int> s; // 红黑树(有序)
std::unordered_set<