一、序列式容器概述
- 关于STL容器的总体介绍,可以参阅:https://blog.csdn.net/qq_41453285/article/details/105482769
- STL内部预先定义好的序列式容器有:
- array:在固定大小的array内管理元素
- vector:可变大小数组
- deque:双端队列
- list:双向链表
- forward_list:单向链表
- array是TR1引入的,进入C++标准库的时间比较短,而且它有一些特殊属性,与其他STL容器不共通
二、特点
- 总的来说:固定大小数组。支持快速随机访问。不能添加或删除元素。
- 是C++11标准新增的类型,设计的目的是:与内置数组相比,array是一个更安全、更容易使用的数组类型
- array对象的大小是固定的,因此不能进行删除、添加、以及改变容器大小等
三、头文件、using声明
- 头文件:#include <array>
- using声明:using std::array;
四、初始化
- array<T,size> v1; ==>v1是一个空的array(array已经分配了空间,但是没初始化,都是垃圾值)
- array<T,size> v2(v1); ===>v2是v1的副本,拷贝构造(v1和v2在定义时,<>内必须是相同的大小)
- array<T,size> v2=v1; ===>同上(注意,=运算符只能用于此处,单独拿出来用不行)
- array<T,size> v1{a,b,c...}; ===>用元素a,b,c进行初始化
- array<T,size> v1={a,b,c...}; ===>同上
五、相关操作
1.运算符
a1==a2;//判断a1和a2是否相等
a1!=a2;//判断a1和a2是否相等
>、>=、<、<= //以字典顺序进行比较
2.取值
- 索引取值:a[0],a[1],a[2]....
六、相关函数
- array功能有限,只支持部分函数,且部分函数功能与其他容器函数功能不一样
- 因为array是固定大小,所以插入删除之类的函数都没有
a.empty();//判断是否为空,返回布尔值
a.size();//返回容器中的元素个数
a.max_size();//返回容器的容量
a.front();//得到头元素
a.back();//得到尾元素
a.at(int i);//得到下标i处的元素,若下标越界,会抛出异常
a.data();//获取指向第一个数据的指针
//a1与a2必须是相同的大小
a1.swap(a2);//将a1和a2进行交换。容器的成员函数版本
swap(a1,a2);//同上。系统函数版本
a.assign(t);//将容器内的元素全部变为t
a.fill(t);//将容器内的元素全部变为t
七、使用
- 使用时,必须指定大小
array<int, 3> a{1,2,3};
array<int, 3> b = { 1,2,3 };
- 初始化之后,不能再进行赋值
array<int, 3> a{1,2,3};
a={4,5,6};//错误