array是固定大小的顺序容器,它们保存了一个以严格的线性顺序排列的特定数量的元素。
在内部,一个数组除了它所包含的元素(甚至不是它的大小,它是一个模板参数,在编译时是固定的)以外不保存任何数据。存储大小与用语言括号语法([])声明的普通数组一样高效。这个类只是增加了一层成员函数和全局函数,所以数组可以作为标准容器使用。
与其他标准容器不同,数组具有固定的大小,并且不通过分配器管理其元素的分配:它们是封装固定大小数组元素的聚合类型。因此,他们不能动态地扩大或缩小。
零大小的数组是有效的,但是它们不应该被解除引用(成员的前面,后面和数据)。
与标准库中的其他容器不同,交换两个数组容器是一种线性操作,它涉及单独交换范围内的所有元素,这通常是相当低效的操作。另一方面,这允许迭代器在两个容器中的元素保持其原始容器关联。
数组容器的另一个独特特性是它们可以被当作元组对象来处理:array头部重载get函数来访问数组元素,就像它是一个元组,以及专门的tuple_size和tuple_element类型。
template < class T, size_t N > class array;
方法 | 含义 |
---|---|
begin | 返回指向数组容器中第一个元素的迭代器 |
end | 返回指向数组容器中最后一个元素之后的理论元素的迭代器 |
rbegin | 返回指向数组容器中最后一个元素的反向迭代器 |
rend | 返回一个反向迭代器,指向数组中第一个元素之前的理论元素 |
cbegin | 返回指向数组容器中第一个元素的常量迭代器(const_iterator) |
cend | 返回指向数组容器中最后一个元素之后的理论元素的常量迭代器(const_iterator) |
crbegin | 返回指向数组容器中最后一个元素的常量反向迭代器(const_reverse_iterator) |
crend | 返回指向数组中第一个元素之前的理论元素的常量反向迭代器(const_reverse_iterator) |
size | 返回数组容器中元素的数量 |
max_size | 返回数组容器可容纳的最大元素数 |
empty | 返回一个布尔值,指示数组容器是否为空 |
operator[] | 返回容器中第 n(参数)个位置的元素的引用 |
at | 返回容器中第 n(参数)个位置的元素的引用 |
front | 返回对容器中第一个元素的引用 |
back | 返回对容器中最后一个元素的引用 |
data | 返回指向容器中第一个元素的指针 |
fill | 用 val(参数)填充数组所有元素 |
swap | 通过 x(参数)的内容交换数组的内容 |
get(array) | 形如 std::get<0>(myarray) ;传入一个数组容器,返回指定位置元素的引用 |
relational operators (array) | 形如 arrayA > arrayB ;依此比较数组每个元素的大小关系 |
1. array::begin
返回指向数组容器中第一个元素的迭代器。
iterator begin() noexcept;
const_iterator begin() const noexcept;
Example
#include <iostream>
#include <array>
int main()
{
std::array<int, 5> myarray = {
2, 16, 77,34, 50};
std::cout << "myarray contains:";
for(auto it = myarray.begin(); it != myarray.end(); ++i)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Output
myarray contains: 2 16 77 34 50
2. array::end
返回指向数组容器中最后一个元素之后的理论元素的迭代器。
iterator end() noexcept;
const_iterator end() const noexcept;
Example
#include <iostream>
#include <array>
int main ()
{
std::array<int,5> myarray = {
5, 19, 77, 34, 99 };
std::cout << "myarray contains:";
for ( auto it = myarray.begin(); it != myarray.end(); ++it )
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Output
myarray contains: 5 19 77 34 99
3. array::rbegin
返回指向数组容器中最后一个元素的反向迭代器。
reverse_iterator rbegin()noexcept;
const_reverse_iterator rbegin()const noexcept;
Example
#include <iostream>
#include <array>
int main ()
{
std::array<int,4> myarray = {
4, 26, 80, 14} ;
for(auto rit = myarray.rbegin(); rit < myarray.rend(); ++rit)
std::cout << ' ' << *rit;
std::cout << '\n';
return 0;
}
Output
myarray contains: 14 80 26 4
4. array::rend
返回一个反向迭代器,指向数组中第一个元素之前的理论元素(这被认为是它的反向结束)。
reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;
Example
#include <iostream>
#include <array>
int main ()
{
std::array<int,4> myarray = {
4, 26, 80, 14};
std::cout << "myarray contains";
for(auto rit = myarray.rbegin(); rit < myarray.rend(); ++rit)
std::cout << ' ' << *rit;
std::cout << '\n';
return 0;
}
Output
myarray contains: 14 80 26 4
5. array::cbegin
返回指向数组容器中第一个元素的常量迭代器(const_iterator);这个迭代器可以增加和减少,但是不能用来修改它指向的内容。