在 C++11 中引入的 std::array
是一个容器,它封装了固定大小的数组。它提供了标准容器类的接口,比如迭代器、容量查询和元素访问等,同时保持了内置数组的性能优势。以下是一些关于 std::array
的关键特性和使用示例:
在 C++11 中引入的 std::array
是一个容器,它封装了固定大小的数组。它提供了标准容器类的接口,比如迭代器、容量查询和元素访问等,同时保持了内置数组的性能优势。以下是一些关于 std::array
的关键特性和使用示例:
std::vector
不同,std::array
的大小在编译时就确定了,因此不能动态改变大小。- 堆栈存储:std::array
的元素通常存储在栈上(而非堆上),这可能有助于提高缓存一致性和性能。- 直接支持范围循环:可以直接使用范围基于的循环来遍历 std::array
。- 元素访问:提供了 .at()
和 []
操作符来访问元素,其中 .at()
在越界时抛出异常。- 支持全部标准容器操作:如 begin()
, end()
, size()
, swap()
, 等等。### 使用示例cpp#include <iostream>#include <array>int main() { // 创建一个 std::array 对象,其中包含 5 个整数 std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 使用范围基于的循环打印数组元素 for (int i : arr) { std::cout << i << " "; } std::cout << std::endl; // 使用 size() 函数打印数组的大小 std::cout << "Array size: " << arr.size() << std::endl; // 访问第三个元素 std::cout << "Third element: " << arr.at(2) << std::endl; // 直接修改第四个元素 arr[3] = 10; std::cout << "Modified fourth element: " << arr[3] << std::endl; return 0;}
### 为什么使用 std::array
?- 类型安全和异常处理:内置数组不提供越界检查,而 std::array
的 .at()
方法可以安全地访问元素,并在出现越界时抛出异常。- 更好的接口:std::array
提供了一致的接口和容器兼容性,可以使用标准库中的算法和函数,例如 std::sort(arr.begin(), arr.end())
。- 效率:尽管 std::array
提供了类似容器的接口,但由于其固定大小和堆栈存储的特性,其运行时效率与内置数组相当。这些特性使得 std::array
在需要固定大小数组的场景中,比内置数组更加方便且安全。