stl详解 包括各种实例代码

STL介绍 3 1、STL简介 3 2、算法 3 3、容器 3 4、迭代器 4 5、使用注意 4 一、stack 堆栈 5 成员函数: 5 实例程序: 5 二、queue 队列 6 成员函数: 6 实例程序: 6 三、Priority Queues 优先队列 7 成员函数: 7 实例程序: 7 四、Bitset位集合 9 成员函数: 9 实例程序: 9 五、list 列表 11 成员函数: 11 实例程序: 12 六、vector向量 13 成员函数: 13 实例程序: 14 七、map / multimap 映射与多重映射 15 map成员函数: 15 Map实例程序: 17 MultiMap实例程序: 18 八、set / multiset 集合与多重集合 19 成员函数: 19 Set实例程序: 20 MultiSet实例程序: 21 九、deque (Double Ended Queue) 双端队列 22 成员函数: 22 实例程序: 23 十、string 字符串 24 成员函数: 24 实例程序: 28 十一、常用算法调用 29 1. for_each 29 2. min_element / max_element 29 3. copy / copy_n /copy_backward 29 4. fill / fill_n 29 5. remove / remove_if 30 6. unique 31 7. rotate 32 8. random_shuffle 32 9. partition / stable_partition 33 10. sort / stable_sort 33 11. partial_sort 34 12. nth_element 34 13. lower_bound / upper_bound //要求区间有序 34 14. binary_search //要求有序区间 35 15. merge / inplace_merge 35 16. includes 36 17. set_union, set_intersection, set_difference, set_symmetric_diffrece 36 18. next_permutation / prev_permutation 36 19. power 37 20. heap operations 38 21. min / max / swap 39 22. numeric_limits 39 ### STL详解及实例代码 #### 一、STL简介 STL(Standard Template Library,标准模板库)是一种广泛应用于C++编程的通用编程工具集,最初由Alexander Stepanov、Meng Lee和David R. Musser等人在惠普实验室开发。尽管STL最初不是为C++设计的,但它已成为C++标准库的重要组成部分,并极大地丰富了C++语言的功能性和灵活性。 STL的核心组件包括: 1. **算法**:提供了一系列高效的数据处理方法,如排序、查找等。 2. **容器**:用于存储和管理数据结构,如vector、list等。 3. **迭代器**:作为容器和算法之间的桥梁,使得不同的容器可以共享同一组算法。 4. **适配器**:用于改变容器的行为或接口。 5. **分配器**:管理内存的分配和释放。 #### 二、算法 算法是STL的核心之一,它提供了一组高效的通用函数,可以在不同的容器上运行,从而极大地提高了代码的复用性。STL算法大致可以分为以下几类: 1. **非修改顺序算法**:不改变输入范围内的元素,例如`find`、`count`。 2. **修改顺序算法**:可能改变输入范围内的元素顺序,例如`sort`、`reverse`。 3. **排序算法**:对输入范围内的元素进行排序,例如`sort`、`stable_sort`。 4. **数值算法**:执行数学运算,例如`accumulate`。 5. **迭代器算法**:操作迭代器,例如`next`、`prev`。 **示例**:使用`sort`算法对vector进行排序。 ```cpp #include <algorithm> #include <vector> int main() { std::vector<int> v = {5, 2, 9, 1, 5, 6}; std::sort(v.begin(), v.end()); return 0; } ``` #### 三、容器 容器是STL中的另一个重要组成部分,它们用于存储和管理不同类型的数据。常用的容器包括: 1. **顺序容器**:如`vector`、`deque`。 2. **关联容器**:如`set`、`map`。 3. **容器适配器**:如`stack`、`queue`。 **示例**:使用`vector`容器。 ```cpp #include <vector> int main() { std::vector<int> v(5); // 创建一个包含5个元素的vector v[0] = 10; return 0; } ``` #### 四、迭代器 迭代器是连接容器和算法的纽带,它们定义了如何访问容器中的元素。迭代器具有以下几种类型: 1. **输入迭代器**:只读访问。 2. **输出迭代器**:只写访问。 3. **前向迭代器**:支持前向访问。 4. **双向迭代器**:支持前后向访问。 5. **随机访问迭代器**:支持任意位置的访问。 **示例**:使用迭代器遍历vector。 ```cpp #include <vector> #include <iostream> int main() { std::vector<int> v = {1, 2, 3, 4, 5}; for (auto it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; } return 0; } ``` #### 五、特定容器详解 ##### 1. stack堆栈 - **成员函数**:`push`、`pop`、`top`、`empty`、`size`。 - **实例程序**:使用`stack`进行逆波兰表达式计算。 ##### 2. queue队列 - **成员函数**:`push`、`pop`、`front`、`back`、`empty`、`size`。 - **实例程序**:使用`queue`实现先进先出的队列操作。 ##### 3. Priority Queues优先队列 - **成员函数**:`push`、`top`、`pop`、`empty`、`size`。 - **实例程序**:使用优先队列实现任务调度。 ##### 4. Bitset位集合 - **成员函数**:`operator[]`、`size`、`test`、`any`、`all`、`none`、`count`、`reset`、`flip`、`set`。 - **实例程序**:使用`bitset`进行位操作。 ##### 5. list列表 - **成员函数**:`push_front`、`push_back`、`pop_front`、`pop_back`、`empty`、`size`、`insert`、`erase`。 - **实例程序**:使用`list`实现双向链表操作。 ##### 6. vector向量 - **成员函数**:`push_back`、`pop_back`、`empty`、`size`、`resize`、`at`、`operator[]`、`begin`、`end`。 - **实例程序**:使用`vector`存储动态数组。 ##### 7. map / multimap映射与多重映射 - **成员函数**:`insert`、`find`、`count`、`erase`、`empty`、`size`、`clear`、`begin`、`end`。 - **实例程序**:使用`map`实现键值对映射。 ##### 8. set / multiset集合与多重集合 - **成员函数**:`insert`、`erase`、`empty`、`size`、`clear`、`begin`、`end`。 - **实例程序**:使用`set`存储唯一元素集合。 ##### 9. deque (Double Ended Queue) 双端队列 - **成员函数**:`push_front`、`push_back`、`pop_front`、`pop_back`、`empty`、`size`。 - **实例程序**:使用`deque`实现两端均可插入删除的操作。 ##### 10. string 字符串 - **成员函数**:`length`、`size`、`empty`、`at`、`operator[]`、`append`、`insert`、`erase`、`find`、`substr`。 - **实例程序**:使用`string`进行文本处理。 #### 六、常用算法调用 除了上述提到的算法之外,还有一些常用的算法,例如`for_each`、`min_element`、`max_element`等。 1. **for_each**:对容器中的每个元素应用一个函数。 2. **min_element / max_element**:找到容器中的最小/最大元素。 3. **copy / copy_n /copy_backward**:复制容器中的元素。 4. **fill / fill_n**:填充容器中的元素。 5. **remove / remove_if**:根据条件移除元素。 6. **unique**:移除重复元素。 7. **rotate**:旋转容器中的元素。 8. **random_shuffle**:随机打乱容器中的元素。 9. **partition / stable_partition**:根据条件对容器进行分区。 10. **sort / stable_sort**:排序容器中的元素。 11. **partial_sort**:对容器的一部分进行排序。 12. **nth_element**:寻找第n个元素。 13. **lower_bound / upper_bound**:在有序容器中查找元素的位置。 14. **binary_search**:在有序容器中查找元素。 15. **merge / inplace_merge**:合并两个有序容器。 16. **includes**:判断一个容器是否包含另一个容器的所有元素。 17. **set_union, set_intersection, set_difference, set_symmetric_diffrece**:集合运算。 18. **next_permutation / prev_permutation**:获取下一个/前一个排列。 19. **power**:计算幂次方。 20. **heap operations**:堆操作。 21. **min / max / swap**:基本操作。 22. **numeric_limits**:数值限制。 以上是STL的一些基础介绍和示例代码,希望对学习C++编程有所帮助。



























剩余46页未读,继续阅读

- xiao_bao_bao2013-11-13讲的还不错,但还没来得急学习。希望以后有时间。哎。
- m筱米2013-04-11讲的很详细 实用

- 粉丝: 37
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于STC89C52系列单片机的倒计时器制作研究.doc
- A星算法matlab源码及详细注释.doc
- 宾馆信息管理系统数据库课程设计报告.doc
- 网络安全的基本知识.docx
- 软件工程开题报告.doc
- 基于医疗大数据的DRGs分析(白板).ppt
- 医疗改革中公共卫生体系信息化建设探讨.doc
- 基于面向对象技术的楼宇自控网络协议的实现.doc
- 电器有限公司网络营销策划方案.pptx
- 基于MicroBlaze的嵌入式系统设计.doc
- 网络社交聊天的吸引力话术.doc
- 数据库培训-高主任1.ppt
- 各种BIOS详细设置图解.docx
- 矿井开采设计CAD第章专业图纸绘制.ppt
- 网络基础设施安全.ppt
- 计算机联锁系统故障处理.ppt


