前言
本篇继续学习C++中的STL,序列容器。
序列容器类型
序列容器,一般是通过类似数组的形式,按照次序存储某种类型的数据,包括:
array<T, N> 数组容器,类似于普通数组,存储N个T类型的数据,不能增加或者减少元素,只能修改元素的值。vector<T> 向量容器,长度可变,当内存不足时会自动申请分配新内存。可以在尾部高效增加或者删除元素,也可以在任意位置低效插入和删除元素。deque<T> 双端队列容器,可以在头部和尾部高效增删元素,也可以在任意位置低效插入和删除元素。list<T> 双向链表容器,可以在容器任何位置高效插入和删除元素,但访问元素时需要从第一个或最后一个元素开始沿着迭代器访问,效率较低。forward_list<T> 单向链表,与list<T> 类似,但其迭代器是前向访问的,也就是只能从第一个元素开始沿着迭代器访问。queue<T> 队列容器,先进先出,只能在尾部添加元素,在头部删除元素,只能访问头部和尾部元素,没有迭代器。stack<T> 栈容器,先进后出,只能向栈顶添加或者弹出元素,只能访问栈顶元素,同样没有迭代器。
序列容器方法
序列容器有许多共通的方法,也有一些独特的方法。
以vecctor为例:
begin(),rbegin(),cbegin(), crbegin(),end(),rend(),cend(),crend() # 返回迭代器,r表示反向,c表示常量
assign() # 把另一个容器中元素放到本容器中
operator=(),operator[] # 容器赋值,索引访问元素
size() # 元素个数
max_size() # 容器最大容量
capacity() # 当前容量
empty() # 判断是否是空容器
resize() # 改变容器长度
front(),back() # 返回第一个、最后一个元素的引用
at() # 使用边界检查的索引访问
push_back(), pop_back() # 从尾部添加/删除一个元素
insert(), erase() # 向某个位置插入或删除一段元素
clear() # 清空容器(但不回收空间)
swap() # 交换两个容器的所有元素
data() # 返回容器第一个元素的指针
begin(), end() 这些方法,没有迭代器的容器自然就不具备。
assign() 把其它容器的元素替换自身,但array<T> 数组容器是定长的,自然没有该方法,resize(),push_back(),pop_back(),insert(),erase(),clear() 这些方法同理。
全部记住这些方法比较麻烦,一般IDE都会有提示。
|