std::
array
类模板 <array>
template & class T, size_t N > class array;
数组类
数组是固定大小的序列容器:它们保存特定数量的按严格线性顺序排列的元素。
在内部,模板数组不保留除其包含的元素以外的任何数据(甚至不保留它的大小,它是一个模板形参,在编译时固定)。
就存储大小而言,它与用语言的括号语法([])声明的普通数组一样有效。
这个类只添加了成员模板类型和全局函数,这样数组就可以用作标准容器。
与其他标准容器不同,数组具有固定的大小,并且不通过分配器管理其元素的分配:
它们是封装固定大小的元素数组的聚合类型.
因此,它们不能被动态地扩展或缩减(有关可以扩展的类似容器,请参阅
vector)。
零大小的数组是有效的,但不应该对它们进行解引用(
front,
back,
和 data)。
与标准库中的其他容器不同,交换两个数组容器是一个线性操作,涉及每个交换范围内的所有元素,
这是一个效率低下的操作。
但是,这样会使两个容器中的元素迭代器保持它们与原来的容器关联。
数组容器的另一个独特特性是,它们可以被视为元组对象:
<array> 头文件重载get函数,以像访问元组一样访问数组的元素,
以及专门的tuple_size和tuple_element类型。
☲ 容器特性
-
顺序排列
-
序列容器中的元素按照严格的线性顺序排列。每个元素根据它们在这个序列中的位置来访问。
-
内存连续
-
元素存储在连续的内存位置,允许对元素随时随机访问。
指向一个元素的指针可以被偏移以访问其他元素。
-
固定大小
-
容器使用隐式构造函数和析构函数静态地分配所需的空间。它的大小是编译时常量。没有内存或时间开销。
☲ 模板参数
-
T
-
所包含元素的类型。
成员类型的别名 array::value_type。
-
N
-
数组的大小,表示元素的数量。
在 array成员函数的引用中,模板形参也假定有相同的名称。
☉ 成员类型
以下是数组的成员类型。它们被成员函数用作形参和返回类型:
成员类型 |
定义 |
注释 |
value_type |
起始模板参数(T) |
值类型 |
reference |
value_type& |
引用类型 |
const_reference |
const value_type& |
常引用 |
pointer |
value_type* |
指针 |
const_pointer |
const value_type* |
常量指针 |
iterator |
a random access iterator to value_type |
一个随机访问迭代器,可转换为const_iterator |
const_iterator |
a random access iterator to const value_type |
一个常量随机访问迭代器 |
reverse_iterator |
reverse_iterator<iterator> |
反向迭代器 |
const_reverse_iterator |
reverse_iterator<const_iterator> |
常量反向迭代器 |
size_type |
size_t |
无符号整型 |
difference_type |
ptrdiff_t |
有符号整型 |
☞ 成员函数
迭代器:
begin |
返回一个指向数组开头的迭代器 (公众成员函数) |
end |
返回一个指向数组末尾元素的下一个元素的迭代器 (公众成员函数) |
rbegin |
返回指向数组最后一个元素的反向迭代器 (公众成员函数) |
rend |
返回指向数组开始元素之前的理论元素的反向迭代器(公众成员函数) |
cbegin |
返回一个指向数组开头的常量迭代器 (公众成员函数) |
cend |
返回一个指向数组末尾元素的常量迭代器 (公众成员函数) |
crbegin |
返回指向数组最后一个元素的常量反向迭代器(公众成员函数) |
crend |
返回指向数组开始元素的常量反向迭代器(公众成员函数) |
容量:
元素访问:
修改器:
☣ 非成员函数重载
🍄 非成员类特化