博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11:尽量使用std::array来代替数组
阅读量:4206 次
发布时间:2019-05-26

本文共 950 字,大约阅读时间需要 3 分钟。

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

定义于头文件 
template< class T, std::size_t N > struct array;(C++11 起)std::array 是封装固定大小数组的容器。此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组,它不会自动退化成 T* 。作为聚合类型,它能聚合初始化,只要有至多 N 个能转换成 T 的初始化器: std::array
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
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 << " ";}

转载地址:http://xaoli.baihongyu.com/

你可能感兴趣的文章
Swift cell的自适应高度
查看>>
【linux】.fuse_hiddenXXXX 文件是如何生成的?
查看>>
【LKM】整合多个LKM为1个
查看>>
【Kernel】内核热补丁技术揭秘
查看>>
【Error】/usr/bin/env: ‘python’: No such file or directory
查看>>
手工挂载VMware共享目录
查看>>
【Kernel】pid 与 tgid
查看>>
【Error】make LKM时 找不到符号
查看>>
【转载】【C语言】浅析C语言之uint8_t / uint16_t / uint32_t /uint64_t
查看>>
【转载】yum update 自动忽略内核更新
查看>>
【maven】打包jar上传到服务器运行
查看>>
关闭centos wayland
查看>>
【Error】chsh: PAM: Authentication failure
查看>>
【Error】zsh历史记录丢失
查看>>
解析漏洞总结
查看>>
有趣的二进制 读书笔记
查看>>
【Windows C++】调用powershell上传指定目录下所有文件
查看>>
kotlin-android-extensions 插件无效问题
查看>>
经典排序算法--Java实现
查看>>
Java中JRadioButton单选按钮分组方法
查看>>