版权声明:本文为博主原创文章,博客地址:https://blog.csdn.net/qq_41855420,未经博主允许不得转载。 https://blog.csdn.net/qq_41855420/article/details/89764420
C++ 容器array:
定义于头文件 < array > template< class T, std::size_t N > struct array;
是封装固定大小数组的容器。
该结构体结合了 C 风格数组的性能、可访问性与容器的优点,比如可获取大小、支持赋值、随机访问迭代器等。
array 满足容器 (Container) 和可逆容器 (ReversibleContainer) 的要求,除了默认构造的 array 是非空的,以及进行交换的复杂度是线性,它满足相接容器 (ContiguousContainer) (C++17 起)的要求并部分满足顺序容器 (SequenceContainer) 的要求。
当其长度为零时 array ( N == 0 )有特殊情况。此时, array.begin() == array.end() ,并拥有某个唯一值。在零长 array 上调用 front() 或 back() 是未定义的。
成员类型
成员类型 | 定义 |
---|---|
value_type | T |
size_type | std::size_t |
difference_type | std::ptrdiff_t |
reference | value_type& |
const_reference | const value_type& |
pointer | value_type* |
const_pointer | const value_type* |
iterator | 随机(任意)访问迭代器 |
const_iterator | 常随机(任意)访问迭代器 |
reverse_iterator | std::reverse_iterator |
const_reverse_iterator | std::reverse_iterator<const_iterator> |
成员函数
隐式定义的成员函数
(构造函数)(隐式声明) | 遵循聚合初始化的规则初始化 array (注意默认初始化可以导致非类的 T 的不确定值)(公开成员函数) |
(析构函数)(隐式声明) | 销毁 array 的每个元素 (公开成员函数) |
operator= (隐式声明) | 以来自另一 array 的每个元素重写 array 的对应元素 (公开成员函数) |
元素访问
at | 访问指定的元素,同时进行越界检查 (公开成员函数) |
operator[] | 访问指定的元素 (公开成员函数) |
front | 访问第一个元素 (公开成员函数) |
back | 访问最后一个元素 (公开成员函数) |
data | 返回指向内存中数组第一个元素的指针 (公开成员函数) |
迭代器
begin、cbegin | 返回指向容器第一个元素的迭代器 (公开成员函数) |
end、cend | 返回指向容器尾端的迭代器 (公开成员函数) |
rbegin、crbegin | 返回指向容器最后元素的逆向迭代器 (公开成员函数) |
rend、crend | 返回指向前端的逆向迭代器 (公开成员函数) |
容量
empty | 检查容器是否为空 (公开成员函数) |
size | 返回容纳的元素数 (公开成员函数) |
max_size | 返回可容纳的最大元素数 (公开成员函数) |
示例
#include <array>
#include <string>
#include <iterator>
#include <iostream>
#include <algorithm>
int main(){
// 用聚合初始化构造
std::array<int, 3> a1{1, 2, 3};
std::array<int, 3> a2 = {1, 2, 3};
std::array<std::string, 2> a3 = { "a", "b" };
// 支持容器操作
std::sort(a1.begin(), a1.end());
std::reverse_copy(a2.begin(), a2.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
// 支持带范围 for 循环
for(const auto& s: a3){
std::cout << s << ' ';
}
return 0;
}
输出:
3 2 1
a b