一、STL容器概述
C++ STL (Standard Template Library标准模板库)是通用类模板和算法的集合,它给我们提供了一些标准的数据结构的实现如queues(队列), lists(链表), 和 stacks(栈)等。在我们使用C++编程时经常会使用到STL容器,非常简单也很方便。
STL的容器可以分为以下三个大类:
顺序结构:
Vectors(动态数组)
Lists(链表)
Double Ended Queues(双向队列)
常用函数:
在最后添加一个元素 push_back()
移除最后一个元素 pop_back()
插入元素 insert()
删除指定元素erase()
容器适配器:
Stacks(栈)
Queues(队列)
Priority Queues(优先队列)
常用函数:
增加元素 push()
移除元素 pop()
联合容器:
Bitsets
Maps
MultiMaps
Sets
MultiSets
常用函数:
插入元素:insert()
删除元素:erase()
我们程序员使用复杂数据结构的最困难的部分已经由STL完成. 如果我们想使用包含int数据的stack, 我们只要写出如下的代码:
stack<int> myStack;
接下来, 我们只要简单的调用 push() 和 pop() 函数来操作栈. 借助 C++ 模板的威力, 他可以指定任何的数据类型,不仅仅是int类型. STL stack实现了栈的功能,而不管容纳的是什么数据类型。
二、STL容器汇总
【C++ STL 温故而知新 001】vector容器和iterator迭代器
三、STL容器比较
vector | deque | list | set | multiset | map | multimap | |
名称 | 向量容器 | 双向队列容器 | 列表容器 | 集合 | 多重集合 | 映射 | 多重映射 |
内部数 据结构 | 连续存储的数组形式(一端开口的组) | 连续或分段连续存储数组(两端 开口的数组) | 双向环状链表 | 红黑树(平衡检索二叉树) | 红黑树 | 红黑树 | 红黑树 |
| |||||||
头文件 | #include <vector> | #include <deque> | #include <list> | #include <set> | #include <set> | #include <map> | #include <map> |
操作元素的方式 | 下标运算符:[0](可以用迭代器,但插入删除操作时会失效) | 下标运算符或迭代器 | 只能用迭代器(不断用变量值来递推新值,相当于指针),不支持使用下标运算符 | 迭代器 | 迭代器 | 迭代器 | 迭代器 |
插入删除操作迭代器是否失效 | 插入和删除元素都会使迭代器失效 | 插入任何元素都会使迭代器失效。删除头和尾元素,指向被删除节点迭代器失效,而删除中间元素会使所有迭代器失效 | 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 | 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 | 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 | 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 | 插入,迭代器不会失效。删除,指向被删除节点迭代器失效 |
vector | deque | list | set | multiset | map | multimap | |
名称 | 向量容器 | 双向队列容器 | 列表容器 | 集合 | 多重集合 | 映射 | 多重映射 |
特点 | 增加和获取元素效率 很高,插入和删除的 效率很低
| 增加和获取元素效率 较高,插入和删除的 效率较高
| 增加和获取元素效率 很低,插入和删除的 效率很高 | 1.键(关键字)和值(数据)相等(就是模版只有一个参数,键和值合起来) 2.键唯一 3.元素默认按升序排列 | 1.键和值相等 2.键可以不唯一 3.元素默认按升序排列 | 1.键和值分开(模版有两个参数,前面是键后面是值) 2.键唯一 3.元素默认按键的升序排列 | 1.键和值分开 2.键可以不唯一 3.元素默认按键的升序排列 |
定义容器 | vector<string> book(50); | deque<string> book(50); | list<string> book; | set<string> book; | multiset<string> book; | map<int,string> book; | multimap<int,string> book; |