C++11之新增容器类array

在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++编程中不可或缺的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ylf_fengge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值