C++11:尽量使用std::array来代替数组

C++11后,标准库引入了更现代化的数组std::array,cppreference.com是这样介绍的:

定义于头文件 <array>
template< 
    class T, 
    std::size_t N 
> struct array;
(C++11 起)

std::array 是封装固定大小数组的容器。


此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员
的结构体。不同于 C 风格数组,它不会自动退化成 T* 。作为聚合类型,它能聚合初始化,只
要有至多 N 个能转换成 T 的初始化器: std::array<int, 3> a = {1,2,3}; 
该结构体结合了 C 风格数组的性能和可访问性和容器的优点,譬如知晓其大小、支持赋值、随机访问等。
std::array 满足容器 (Container) 和可逆容器 (ReversibleContainer) 的要求,除
了默认构造的 array 是非空的,及交换的复杂度是线性,它满足相接容器 
(ContiguousContainer) 的要求并 (C++17 起)部分满足顺序容器 
(SequenceContainer) 的要求。

一种特殊情况是 array ( N == 0 )。该情况下, array.begin() == array.end() ,
并拥有某个唯一值。在零长 array 上调用 front() 或 back() 的效应是未定义的。

array 亦可用作拥有 N 个同类型元素的元组。

简单来说,std::array除了有传统数组支持随机访问、效率高、存储大小固定等特点外,还支持迭代器访问、获取容量、获得原始指针等高级功能。而且它还不会退化成指针T *给开发人员造成困惑。

用std::array后,可以更简便地进行初始化、修改、遍历,这里有个例子:

std::array<int, 10> arr = {1,2,3,4,5,6,7,8,9,0};
std::for_each(arr.begin(), arr.end(), [](int &i){i++;});
for(auto i : arr){std::cout << i << " ";}
  • 20
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值