在C++编程世界里,数组是一种基础且常用的数据结构。在C++11 标准中引入了 <array>
头文件,提供了一种固定大小的数组容器。
1,array与传统数组的比较。
在C++11之前,我们使用的是内置数组,例如 int arr[10]; 。这种数组虽然简单直接,但存在一些明显的缺点:
1,没有内置的大小信息:无法直接获取数组的大小,需要手动计算(如使用 sizeof(arr) / sizeof(arr[0]) ),增加了代码出错的风险。
2,缺乏边界检查:访问数组元素时,编译器不会检查索引是否越界,这可能导致程序运行时出现崩溃。
3,复制和赋值不便:内置数组不能直接进行整体复制和赋值操作,只能通过循环逐个元素处理。
而array正好能弥补以上的缺点。
二,array的定义
#include <array>
std::array<T, N> array_name;
T 是数组中元素的类型。
N 是数组的大小,必须是一个非负整数。
三,array的使用
初始化 <array> 需要在编译时确定大小,不能动态改变。例如
#include <iostream>
#include <array>
int main()
{
std::array<int, 3> a = {1, 2, 3}; // 声明一个定长为3的int数组
return 0;
}
四,array常用函数
函数 | 说明 |
begin() / end() | 返回数组的起始/结束迭代器 |
at(size_t pos) | 返回指定位置的元素,带边界检查 |
operator[] | 返回指定位置的元素,不带边界检查 |
front() | 返回数组的第一个元素 |
back() | 返回数组的最后一个元素 |
data() | 返回指向数组数据的指针 |
size() | 返回数组大小 |
swap(array& other) | 交换两个数组的内容 |
fill(const T& value) | 将数组所有元素设置为指定值 |
五 ,array示例
std::array<int, 5> arr = { 1, 2, 3, 4, 5 };
//遍历数组
std::cout << endl;
for (int i = 0; i < arr.size(); ++i)
{
std::cout << arr[i] << " ";
}
std::cout << endl;
for (auto const v : arr)
{
std::cout << v << " ";
}
std::cout << std::endl;
// 获取第一个和最后一个元素
std::cout << "First element: " << arr.front() << std::endl;
std::cout << "Last element: " << arr.back() << std::endl;
try
{
std::cout << arr.at(1) << std::endl; // 正常输出
std::cout << arr.at(6) << std::endl; // 超出范围,抛出异常
}
catch (const std::out_of_range& e)
{
std::cout << "Exception: " << e.what() << std::endl;
}
六,总结
C++11的 array 类在保留传统数组高效性的基础上,克服了其诸多缺点,为C++程序员提供了更安全、易用的数据结构。无论是在性能要求高的底层代码,还是在追求代码健壮性和可读性的应用开发中, array 类都能发挥重要作用,是C++编程中不可或缺的一部分。