C++11标准库 - array

std::array是原生数组的封装,它存放于栈上且大小固定,性能也与之相同。在原生数组的基础上,它添加了范围检查,以及其它的STL的相应特性,比如复制、交换、迭代器、查询大小。

按照C++11的规范,应该抛弃原生数组,所有使用原生数组的地方,都应按需换成vector或者array。对于固定个数的一组值,可以考虑使用std::array

初始化

std::array属于简单对象,没有构造函数,也没有私有或保护成员,这就意味着它不会自动初始化。如果不对其初始化而直接获取其中的值,读出来的是野值。

可以使用聚合表达式(花括号)对其初始化。

array<int, 3> arr = {1, 2, 3};

如果花括号内元素个数小于数组容量,则会为剩余元素自动赋默认值。

也可以用fill函数对其填充。

array<int, 10> arr;
arr.fill(0);

访问元素

可以用operator[]at()对元素随机访问,两者都带范围检查。也可以直接使用迭代器,或者范围for语句。

下面的例子对数组中的十个元素求出最大值,最小值和平均值:

#include <iostream>
#include <array>using namespace std;int main()
{array<int, 10> arr = {17, 68, 87, 48, 1, 76, 90, 73, 95, 13};int minVal = INT_MAX;int maxVal = INT_MIN;int sum = 0;cout << "数组的元素:";for (int elem : arr){cout << elem << ' ';minVal = minVal < elem ? minVal : elem;maxVal = maxVal > elem ? maxVal : elem;sum += elem;}cout << endl<< "最大值:" << maxVal << endl<< "最小值:" << minVal << endl<< "平均值:" << double(sum) / arr.size() << endl;return 0;
}

结果:

数组的元素:17 68 87 48 1 76 90 73 95 13
最大值:95
最小值:1
平均值:56.8

参考

C++ API 参考 - array

C++11标准库 - array 1相关推荐

  1. C++11标准库 - array

    std::array是原生数组的封装,它存放于栈上且大小固定,性能也与之相同.在原生数组的基础上,它添加了范围检查,以及其它的STL的相应特性,比如复制.交换.迭代器.查询大小. 按照C++11的规范 ...

  2. 对象数组参数_【JavaScript 教程】标准库—Array 对象

    作者 | 阮一峰 1.构造函数 Array是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组. var arr = new Array(2);arr.length // ...

  3. 聊聊C++11标准库中堆(heap)算法的源码

    STL中支持堆操作,对外暴露了std::make_heap,std::push_heap,std::pop_heap,std::sort_heap,std::is_heap,std::is_heap_ ...

  4. Python学习笔记: Python 标准库概览二

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python 简介 Python流程介绍:深入Python 流程 Python数据结构 ...

  5. C++prime读书笔记(二)C++标准库:IO、容器、泛型算法、动态内存

    layout: post title: C++prime读书笔记(二)C++标准库:IO.容器.泛型算法.动态内存 description: C++prime读书笔记(二)C++标准库:IO.容器.泛 ...

  6. C++ Primer 17 标准库特殊设置

    标准库特殊设置 1 tuple 类型(元组) tuple 是类似 pair 的模板.每个 pair 的成员类型都不相同,但每个 pair 都恰好有两个成员.不同 tuple 类型的成员类型也不相同,但 ...

  7. 后端返回number类型数据_【JavaScript 教程】标准库—Number 对象

    作者 | 阮一峰 1.概述 Number对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用. 作为构造函数时,它用于生成值为数值的对象. var n = new Number(1) ...

  8. 标准库中的智能指针shared_ptr

    智能指针的出现是为了能够更加方便的解决动态内存的管理问题.注:曾经记得有本书上说可以通过vector来实现动态分配的内存的自动管理,但是经过试验,在gcc4.8.5下是不行的.这个是容易理解的,vec ...

  9. python学习 - 标准库概览

    文章首发于我的个人博客:欢迎大佬们前来逛逛 文章目录 操作系统接口 文件通配符 命令行参数 字符串正则匹配 数学 互联网访问 日期与时间 数据的压缩 性能测试 质量测试 其他库 操作系统接口 使用 o ...

最新文章

  1. 机器学习如何改变大数据管理
  2. OnnxRuntime 性能调优
  3. python嵌套列表知多少
  4. 软引用、弱引用、 java
  5. python创建sqlite3 unicode error_python/sqlite3:发生异常:sqlite3.operationalerror
  6. Android的图片叠加
  7. Altium Designer使用-----快速覆铜脚本的使用
  8. iPhone进入到了恢复模式怎么办?
  9. Delphi历史版本介绍(二)从Delphi8到DelphiXE3
  10. 自动驾驶功能架构的演进
  11. 2018年HBase生态社群画像
  12. python opencv resize函数_python cv2.resize函数high和width注意事项说明
  13. Linux操作系统渗透测试
  14. innodb buffer pool管理--free list
  15. 计算机进入桌面黑屏怎么办,老司机教你电脑进入系统后黑屏怎么办
  16. Arm汇编寻址方式工作模式
  17. MySQL无法启动报 Error: could not open single-table tablespace file ./mysql/innodb_table_sta
  18. A4988驱动42步进电机
  19. 26、vue前端出现跨域问题,如何解决跨域?
  20. 图书借阅管理系统——C++版

热门文章

  1. (8)FPGA面试题触发器满足建立时间和保持时间的原因
  2. linux bootstrap强制结束,Cisco UCCX bootstrap服务目录遍历漏洞
  3. 永中word页码怎么从第二页开始_pdf如何在线转word?这样做,分分钟搞定pdf转word...
  4. 10.FreeRTOS学习笔记-中断管理
  5. Python异常处理try...except...finally raise assert
  6. 12006.eeprom之M24C02
  7. windows linux双系统_还在安装双系统? 试试 Windows 和 Linux 合体
  8. linux中split函数用法,Linux split命令参数及使用方法详解
  9. STM32 I2C通信(读写eeprom)
  10. 八皇后问题的非递归解法