STL基本概念
-
容器:可容纳各种数据类型的通用数据结构,是类模板
-
迭代器:可用于依次存取容器的元素,类似于指针
-
算法:用于操作容器中的元素的函数模板
-
sort()来对一个vector中的数据进行排序
-
find()来搜索一个list中的对象
-
算法本身与他们操作的数据的类型无关,因此它们可以在从简单数组到高度复杂容器的任何数据结构上使用。
容器概述
顺序容器:
概述
容器并非排序的,元素插入位置同元素的值无关
vector——动态一维数组
头文件
元素在内存连续存放。随机存取任何元素都能在常数时间完成
在尾端增删元素具有较佳的性能(大部分是常数时间)
deque——双向队列
头文件
元素在内存连续存放。随机存取任何元素都能在常数时间完成(相比vector比较慢)
在两端增删元素具有较佳的性能(大部分是常数时间)
list——双向链表
头文件
元素在内存不连续存放,不支持随机存放
在任何位置增删元素都能在常数时间里完成
关联容器:
概述
- 元素是排序的
- 插入任何元素,都按相应的排序规则来确定位置
- 在查找时具有较好性能
- 通常以平衡二叉树的方式实现,插入和检索都是log(n)
set/multiset
头文件
set即集合。set中不允许相同元素,multiset中允许
map/multimap
头文件
map和set的不同在于map中存放的元素有且只有两个成员变量,一个为first,一个为second
map根据first值对元素进行从小到大排序,并可快速地根据first来检索元素
map与multimap的不同在于,map不允许相同的first值的元素
容器适配器:
stack(栈)
头文件
栈。是项的有限序列,并满足序列中被删除、检索和修改的项只能是最近插入序列的项(栈顶的项)
即后进先出
queue(单向队列)
头文件
队列。插入只可以在尾部进行;
删除、检索和修改允许从头部进行
即先进先出
priority_queue(优先级队列)
头文件
优先级队列:队列里面维持某种有序
最高优先级元素总是第一个出列
顺序容器与关联容器*有的成员函数
-
begin():返回指向容器中第一个元素的迭代器
-
end():返回指向容器中最后一个元素后面位置的迭代器
-
rbegin():返回指向容器中最后一个元素的迭代器
-
rend():返回指向容器第一个元素前面位置的迭代器
-
erase():从容器中删除一个或者几个元素
-
clear():清空容器
顺序容器常用成员函数
-
front():返回容器中第一个元素的引用
-
back():返回容器中最后一个元素的引用
-
push_back():在容器末尾增加新元素
-
pop_back():删除容器末尾的元素
-
erase():删除迭代器指向的元素(可能会使迭代器失效)
或者删除一个区间,返回被删除元素后面元素的迭代器