std::array是C++11引入的固定大小数组容器,定义在 <array>头文件中。
1、特点
-
编译时确定,不可改变
-
元素连续存储
-
在栈上分配,性能好,无堆分配开销
-
兼容STL,支持迭代器和算法
-
支持拷贝和赋值
-
需要动态大小时使用
std::vector
2、创建和初始化
cpp
#include <array>
std::array<int, 5> arr1; // 默认初始化
std::array<int, 5> arr2 = {1, 2, 3, 4, 5};
std::array<int, 5> arr3{}; // 全部初始化为0
// C++17起可省略类型和大小(推导)
std::array arr3 = {1.0, 2.0, 3.0}; // std::array<double, 3>
3、访问元素
cpp
std::array<int, 5> arr = {1, 2, 3, 4, 5};
// 多种访问方法
arr[0] = 10; // 不检查边界
int x = arr.at(1); // 检查边界,越界抛异常
int first = arr.front(); // 第一个元素
int last = arr.back(); // 最后一个元素
int* ptr = arr.data(); // 原始指针
4、遍历
cpp
// 容量信息
std::cout << "Size: " << arr.size(); // 5
std::cout << "Empty: " << arr.empty(); // false
// 遍历
for (int i = 0; i < arr.size(); ++i) {
std::cout << arr[i] << " ";
}
// 范围for循环
for (const auto& elem : arr) {
std::cout << elem << " ";
}
// 迭代器
for (auto it = arr.begin(); it != arr.end(); ++it) {
std::cout << *it << " ";
}
5、与算法库绑定
cpp
#include <algorithm>
#include <numeric>
std::array<int, 5> arr = {5, 3, 1, 4, 2};
std::sort(arr.begin(), arr.end()); // 排序
int sum = std::accumulate(arr.begin(), arr.end(), 0); // 求和
auto it = std::find(arr.begin(), arr.end(), 3); // 查找
std::reverse(arr.begin(), arr.end()); // 反转
6、结构体绑定(C++17)
cpp
std::array<int, 3> arr = {10, 20, 30};
auto [x, y, z] = arr; // x=10, y=20, z=30