1.vector单端动态容器
有随机访问迭代器,vector<类型>::iterator it,可以通过it+n的方式访问其他元素
vector有“未雨绸缪机制”,即capacity容量要比size要大,每次当size要大于capacity时,它会另外开辟一块空间,并将原有的数据全部移植到新的空间去,这也会造成原来的迭代器失效。
常见API
v.begin()返回容器起始迭代器位置
v.push_back(类型数据);插入
v.pop_back(类型数据);删除
v.insert(迭代器,插入个数,插入数据)
v.erase(迭代器,迭代器)删除两个迭代器之间的元素
v.clear()删除所有元素
运用sort(迭代器,迭代器)可以对vector中迭代器区间 进行排序
如果要自定义自己的排序规则,则写再写一个比较函数
若要用仿函数写法,则需要再写一个类,并重载()运算符
仿函数:在类中重载了小括号运算符,致使“类名()”的写法酷似函数
2.deque双端容器
有随机迭代器
d.push_front(类型数据);插入头部
d.push_back(类型数据);插入尾部
deque容器不像vector容器,需要将数据全部储存在一块连续的空间,而是像链表一样开辟多断空间进行储存,因此不会出现迭代器访问失效
3.stack堆栈容器
没有迭代器,只能用top()来访问末尾元素,插入也只能从尾插入
4.queue队列容器
没有迭代器,只能通过front()、back()访问队列头和尾,插入也只能从尾插入
5.list链表容器
有双向访问迭代器,不能像随机访问迭代器一样,通过+n和-n的写法来访问前后元素,但可以通过it++/--的方式来访问相邻元素
用insert(迭代器,位置,数据)会将数据插入到”位置“中去 ,原先“位置”及"位置“之后的元素会向后移
list不能用系统的sort,但有自己的sort
l.remove()删除自定义类型时,需要重载==运算符,返回值为Bool
同理,如果对自定义类型进行sort,也需要重载运算符<
如果要自定义排序规则,则写l.sort(my_sort),并定义函数bool my_sort()
若要从大到小排,则将<改为>
6.set容器
默认从小打大自动排序,若想实现从大到小排序,则需要写仿函数
用set对自定义数据类型排序,需要重载<运算符
键值key就是实值,且键值不允许相同
系统内部以二叉树形式储存
有只读迭代器,容器的键值一经插入不可修改
equal_range的返回是pair,接收时需要使用pair(迭代器,迭代器)p来接收
7.multiset容器
在set容器的基础上允许键值相同,即可以储存多个相同的数值