std::array 静态数组
(C++11引入的固定大小数组)
std::array
是 C++标准库中的一个容器,它提供了固定大小的数组,具有以下特点:
一、优点
类型安全:与传统的 C 风格数组不同,
std::array
是一个类型安全的容器,它知道自己的大小和元素类型。边界检查:可以通过
at()
成员函数进行边界检查,在访问元素时如果越界会抛出异常,增加了程序的安全性。支持迭代器:可以像其他标准容器一样使用迭代器进行遍历。
可以直接传递给函数:不像 C 风格数组在传递给函数时会退化为指针,
std::array
可以直接作为参数传递给函数,保留了大小信息。与算法良好配合:可以直接使用标准算法库中的算法,无需进行特殊处理。
二、基本用法
定义和初始化:
访问元素:
获取大小:
遍历:
比较:
三、与其他容器和传统数组的转换
转换为 C 风格数组:
转换为
std::vector
:
四、属性和方法
一、属性
固定大小:在编译时确定大小,不能动态改变大小。
存储在栈上或静态存储区:与
std::vector
不同,std::array
通常存储在栈上或静态存储区,这可以提供更好的性能和内存局部性。类型安全:明确指定元素类型,避免了类型不匹配的错误。
二、方法
构造函数:
array()
:默认构造函数,创建一个空的std::array
。array( const T& value )
:创建一个所有元素都初始化为给定值的std::array
。array( const std::array<T,N>& other )
:复制构造函数,从另一个std::array
创建新的std::array
。array( std::array<T,N>&& other )
:移动构造函数,从另一个std::array
移动创建新的std::array
。array( std::initializer_list<T> init )
:使用初始化列表创建std::array
。
元素访问:
at( size_type pos )
:返回指定位置的元素引用,进行边界检查,如果访问越界会抛出异常。operator[]( size_type pos )
:返回指定位置的元素引用,不进行边界检查,速度较快但不安全。front()
:返回第一个元素的引用。back()
:返回最后一个元素的引用。data()
:返回指向数组首元素的指针,可以用于与 C 风格的函数交互。
容量相关:
size()
:返回数组中元素的个数。max_size()
:返回数组能容纳的最大元素个数,与size()
返回值相同。empty()
:判断数组是否为空,对于std::array
总是返回false
,因为它总是有元素。
迭代器相关:
begin()
:返回指向数组首元素的迭代器。end()
:返回指向数组尾元素后一个位置的迭代器。cbegin()
:返回指向数组首元素的常量迭代器。cend()
:返回指向数组尾元素后一个位置的常量迭代器。rbegin()
:返回指向数组尾元素的反向迭代器。rend()
:返回指向数组首元素前一个位置的反向迭代器。crbegin()
:返回指向数组尾元素的常量反向迭代器。crend()
:返回指向数组首元素前一个位置的常量反向迭代器。
填充和交换:
fill( const T& value )
:将数组中的所有元素设置为给定值。swap( array& other )
:交换两个std::array
的内容。
五、应用场景
需要固定大小数组且希望有更好的类型安全和功能支持时。
与其他标准库组件(如算法、迭代器等)配合使用时。
在需要传递数组给函数且希望保留大小信息时。
小结:
Last updated