C++ std::array的原理和语法

原理

std::array 是C++标准库提供的一个模板类,用于表示固定大小的数组。与传统的C风格数组不同,std::array 提供了更加安全和功能丰富的接口,并且它的大小在编译时就已经确定。std::array 实际上是对传统数组的一个轻量级封装,提供了类似于标准容器的接口。

语法
#include <array>// 定义一个包含10个整型元素的数组
std::array<int, 10> arr;// 使用初始化列表初始化数组
std::array<int, 5> arr = {1, 2, 3, 4, 5};// 访问元素
int firstElement = arr[0];      // 使用下标访问
int secondElement = arr.at(1);  // 使用 at() 方法访问(带边界检查)// 获取数组的大小
std::size_t size = arr.size();// 其他成员函数
bool isEmpty = arr.empty();    // 检查数组是否为空
int front = arr.front();       // 获取第一个元素
int back = arr.back();         // 获取最后一个元素// 遍历数组
for (const auto &element : arr) {std::cout << element << " ";
}
主要成员函数
  • T& at(size_type n);
    • 返回数组中第 n 个元素的引用,带边界检查。
  • T& operator[](size_type n);
    • 返回数组中第 n 个元素的引用,不带边界检查。
  • T* data() noexcept;
    • 返回指向数组的指针。
  • constexpr size_type size() const noexcept;
    • 返回数组的大小。
  • constexpr bool empty() const noexcept;
    • 检查数组是否为空。
  • T& front();
    • 返回数组的第一个元素的引用。
  • T& back();
    • 返回数组的最后一个元素的引用。

优点

  1. 类型安全

    • 提供了类型安全,防止类型错误的操作。
  2. 边界检查

    • at() 方法提供了边界检查,防止越界访问。
  3. 接口丰富

    • 提供了类似于标准容器的接口,如 size()empty()front()back() 等,使用更加方便。
  4. 标准库集成

    • 可以与C++标准库的算法和其他容器无缝集成,支持范围 for 循环等现代C++特性。
  5. 常量时间复杂度

    • 由于 std::array 的大小是固定的,许多操作都可以在常量时间内完成。

缺点

  1. 固定大小

    • 数组的大小在编译时就已经确定,不能在运行时动态调整大小,这在某些情况下会不太灵活。
  2. 额外的头文件依赖

    • 需要包含 <array> 头文件。
  3. 不支持动态分配

    • 由于其固定大小的特性,std::array 不能像 std::vector 一样支持动态分配和自动扩展。

总结

std::array 提供了一种安全、方便和功能丰富的方式来替代传统的C风格数组。它提供了类型安全、边界检查和与标准库的良好集成,但其固定大小的特性也限制了它在某些需要动态调整大小的应用场景中的使用。在需要固定大小数组的情况下,std::array 是一个非常优秀的选择。

代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无线幅频仪制作(WiFi通信)-含STM32源程序,JAVA上位机与设计报告

资料下载地址&#xff1a;无线幅频仪制作(WiFi通信)-含STM32源程序,JAVA上位机与设计报告 目录 项目功能 1、 系统方案1.1 比较与选择 1.1.1 控制器的论证与选择 1.1.2 信号源的论证与选择 1.1.3 放大器模块的论证与选择 1.1.4 键盘与显示模块的论证与选择 1.1.5 网络通…

[保姆级教程]uniapp小程序获取右上角胶囊位置信息

文章目录 导文使用uni.getMenuButtonBoundingClientRect();方法实现完整案例 隐藏默认导航栏&#xff1a;全局隐藏当前页面隐藏 导文 uniapp小程序获取右上角胶囊位置信息 使用uni.getMenuButtonBoundingClientRect();方法实现 <script>const menuButtonInfo uni.getMe…

logstash配置文件中明文密码加密

1 案例背景 应用配置文件中禁止使用明文密码&#xff0c;需要加密处理 上图中&#xff0c;红框打码位置为es的明文密码&#xff0c;需要对其进行处理 2 创健keystore文件 /rpa/logstash/bin/logstash-keystore --path.settings /rpa/isa/conf/logstash/ create 注&#xff1…

记录正则提取文章

收到了个word版的电子书&#xff0c;需要拆分并转换为md存储到数据库中&#xff0c;便于搜索&#xff0c;记录下用正则提取文章的过程 word原文中有目录&#xff0c;可提取出目录后&#xff0c;在正文中根据目录来正则提取文章 正则的多行匹配 在匹配大量文章的时候&#xff…

互联网时代的语义网知识表示框架---OWL和OWL2 Fragments

文章目录 RDF和RDFSOWL的重要词汇RDF和RDFS 前面介绍了RDF和RDFS,通过RDF (S)可以表示一些简单的语义,但在更复杂的场景下, RDF (S)语义的表达能力显得太弱,还缺少常用的特征: 对于局部值域的属性定义。RDF (S)中通过rdfs:range定义了属性的值域,该值域是全局性的…

llm-universe | 四. 构建RAG应用

构建RAG应用 一.将LLM 接入 LangChain二.构建检索问答链1.加载向量数据库2.创建一个 LLM3.构建检索问答链4.检索问答链效果测试5.添加历史对话的记忆功能5.1 记忆&#xff08;Memory&#xff09;5.2 对话检索链&#xff08;ConversationalRetrievalChain&#xff09; 三. 部署知…

ts可选参数

可选参数 参数后加个问号&#xff0c;代表这个参数是可选的 function bdd(x:number,y?:number){return x y } console.log(bdd(2,3)) function bdd(x:number,y?:number){return x y } console.log(bdd(2))

从0到1构建自己的短链接系统

1. 短链系统简介 1.1 短链系统的定义与用途 短链系统是指将一个较长的URL地址&#xff0c;通过特定的算法生成一个较短的、具备唯一性的URL地址。这种系统广泛应用于社交网络、短信、邮件营销等场景&#xff0c;它能帮助用户在字数受限的情况下分享链接&#xff0c;并且还具有…

Jenkins 创建流水线任务

Jenkins是一个流行的持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;工具。 Jenkins 创建任务 选择“流水线”类型&#xff0c;该类型的优点是定制化程度非常高 &#xff08;可选&#xff09;添加“参数化构建” 配置仓库选项(ssh连接、分支)和凭据…

C语言从头学26——函数说明符

一、extern 说明符 我们在阅读C、C底层代码或是MFC代码时&#xff0c;会看经常到 extern 这个符号。对于多文件的项目&#xff0c;源码文件经常会用到其他文件声明的函数。这时&#xff0c;当前文件里面&#xff0c;需要给出外部函数的原型&#xff0c;并用 extern 说明…

上古世纪台服注册账号+下载客户端全方位图文教程

又一款新的MMRPG游戏即将上线啦&#xff0c;游戏名称叫做《上古世纪》游戏采用传统MMO类型游戏的玩法&#xff0c;但是开发商采用了先进的游戏引擎&#xff0c;让玩家们可以享受到极致的视觉体验。同时游戏的背景是建立在大陆分崩离析的基础上。各个部落因为领地的原因纷纷开战…

华为HCIP Datacom H12-821 卷11

1.多选题 OSPF 包括哪些报文类型? A、Link State DD B、Hello C、Link State Request D、Database Description 正确答案: B,C,D 解析: 在 OSPF协议中,报文类型分为:hello、DD、LSR、LSU、LSAck 。所以正确答案是“Hello”、“Database Description”、“Link State Re…

Linux中Vim的安装与配置:从入门到精通

Vim&#xff0c;一个功能强大的文本编辑器&#xff0c;已经成为许多开发者和系统管理员的首选工具。它不仅拥有丰富的功能&#xff0c;而且高度可定制&#xff0c;支持多种编程语言的语法高亮&#xff0c;使得编辑代码变得更加轻松。本文将详细介绍如何在Linux系统中安装Vim&am…

设计模式——责任链

责任链模式是一种行为设计模式&#xff0c;用于将请求的发送者和接收者解耦。在这种模式中&#xff0c;请求通过一条由多个对象组成的链传递&#xff0c;直到有一个对象能够处理该请求为止。每个对象都可以决定是否处理请求以及是否将请求传递给下一个对象。 责任链模式通常在…

螺丝扭断力试验机SJ-12

一、设备简介&#xff1a; 螺丝扭断力试验机用于测试螺丝的耐扭断力。本机将螺丝产品所受到轴向扭转力与反作用力&#xff0c;常用扭力扳手来计量。本机可对产品进行转力测、锁动测试、锁动扭力测试等多种测试方式。 二、设备使用&#xff1a; 1、将螺丝强度扭力试验机底座锁于…

代码随想录-Day41

46. 携带研究材料&#xff08;第六期模拟笔试&#xff09; 题目描述 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实…

【小学期】总结与启发:项目结构分析及设计原因

项目结构分析及设计原因 项目结构 student_management │ ├── src │ ├── model │ │ ├── Student.java │ │ └── StudentDAO.java │ │ │ ├── view │ │ └── StudentView.java │ │ │ ├── controller │ │ └── S…

Font Awesome 教程

Font Awesome 是一个非常流行的图标字体库&#xff0c;它提供了一套可缩放的矢量图标&#xff0c;可以方便地在网页、应用程序和其他界面设计中使用。下面是一个基础的Font Awesome教程&#xff0c;帮助你快速上手使用这个图标库&#xff1a; ### 1. 引入Font Awesome #### 使…

Mysql数据库学习

1、数据库基本认知 一&#xff1a;数据库分类 关系型数据库&#xff1a;SQL 主要有MySQL,Oracle,Sql Server等&#xff0c;其主要通过表与表之间&#xff0c;行与列之间的关系进行数据的存储。可以通过外键来建立表之间的关联。 非关系型数据库&#xff1a;NoSQL 主要有HB…