本文共 2229 字,大约阅读时间需要 7 分钟。
STL(标准模板库)提供了六大核心组件,彼此可以组合套用:
容器
容器是各种数据结构,具体包括:算法
提供常用算法,如排序、搜索、复制、删除和反转等,算法是模板函数。迭代器
迭代器是连接容器和算法的桥梁,主要有以下类型:仿函数
仿函数是算法操作的策略,通过重载operator() 方法实现。容器配接器
用于修饰容器或仿函数接口,例如queue 和 stack实际上是 deque 的配接器。空间配置器
负责内存管理,提供动态内存分配和释放功能。| 容器类型 | 特点 | 适用场景 |
|---|---|---|
| vector | 连续内存存储,支持随机访问 | 适合随机存取,元素操作简单 |
| list | 双向链表,支持快速增删 | 适合对象大,操作频繁,插入删除高效 |
| deque | 双向队列,支持首尾快速操作和随机访问 | 适合同时支持随机访问和队列操作 |
| stack | 堆栈,仅支持头部和尾部操作 | 适合先进后出,操作简单 |
| queue | 队列,仅支持头部和尾部操作 | 适合先进先出,操作简单 |
| priority_queue | 优先队列,基于堆实现 | 适合处理优先级任务 |
| set | 有序集合,基于红黑树 | 适合有序插入、查找,元素唯一 |
| multiset | 有序多重集合,基于红黑树 | 适合有序插入、查找,元素可重复 |
| map | 有序映射,基于红黑树 | 适合有序映射,键值对唯一 |
| hash_set | 无序集合,基于哈希表 | 适合快速查找,不关心顺序 |
| hash_map | 无序映射,基于哈希表 | 适合快速查找,不关心顺序 |
| multiset | 有序多重集合,基于红黑树 | 适合有序多重元素的插入、查找 |
| multimap | 有序多重映射,基于红黑树 | 适合有序多重键值对的插入、查找 |
vector 或 deque,因为它们支持快速随机访问。list 或 deque,因为它们支持首尾快速操作。list,因为链表存储更高效。set、multiset、map 或 multimap,因为它们支持有序插入和查找。hash_set、hash_multiset、hash_map 或 hash_multimap,因为它们支持快速查找。set、multiset:插入或删除时,只有当前节点的迭代器失效。STL使用双层级配置器:
malloc 和 free。memory_pool 管理。std::sort 通常与 vector 或 deque 结合使用。std::remove 只是将元素移到尾部,不会真正删除元素。set 提供双向迭代器,但节点访问只支持读取。STL通过内存池管理小块内存,减少碎片,提高利用率。这种机制不适用于通用内存分配,需要知道内存块大小才能释放。
vector。list 或 deque。set 或 map。hash_set 或 hash_map。选择合适的容器和算法,可以提高程序性能和可读性。熟悉容器的内存机制和迭代器行为,有助于避免内存泄漏和逻辑错误。
转载地址:http://qfbkz.baihongyu.com/