【C++ STL序列容器】array 数组

文章目录

  • 【 1. 基本原理 】
  • 【 2. array 的创建 】
    • 2.1 不赋初值
    • 2.2 赋默认值
    • 2.3 赋指定值
  • 【 3. array 的成员函数 】
    • 实例

【 1. 基本原理 】

  • array 是在 C++ 普通数组的基础上添加了一些成员函数和全局函数。在使用上,它 比普通数组更 安全,且效率并没有因此变差
  • array 容器的 大小是固定的,无法动态的扩展或收缩,这也就意味着,在使用该容器的过程无法借由增加或移除元素而改变其大小,它只允许访问或者替换存储的元素。
  • array 以类模板的形式定义在 <array> 头文件 命名空间 std 中:
    在 array<T,N> 类模板中,T 用于指明容器中的存储的具体数据类型,N 用于指明容器的大小,需要注意的是,这里的 N 必须是常量,不能用变量表示。
namespace std{
    template <typename T, size_t N>
    class array;
}

【 2. array 的创建 】

2.1 不赋初值

  • 创建一个名为 myarray 的 array 容器,其包含 10 个浮点型元素。但是,由于未显式指定这 10 个元素的值,因此使用这种方式创建的容器中, 各个元素的值是不确定的(array 容器不会做默认初始化操作)
array<double, 10> myarray;

2.2 赋默认值

  • 将所有的元素初始化为 0 或者和默认元素类型等效的值:
    使用该语句,容器中所有的元素都会被初始化为 0.0。
array < double, 10> values {};

2.3 赋指定值

  • 在创建 array 容器的实例时,可以像创建常规数组那样对元素进行初始化:
array<double, 10> values {0.5,1.0,1.5,,2.0};
  • 这里只初始化了前 4 个元素,剩余的元素都会被初始化为 0.0,如下图所示:
    在这里插入图片描述

【 3. array 的成员函数 】

成员函数功能
begin()返回指向容器中第一个元素的随机访问迭代器。
end()返回指向容器最后一个元素之后一个位置的随机访问迭代器,通常和 begin() 结合使用。
rbegin()返回指向最后一个元素的随机访问迭代器。
rend()返回指向第一个元素之前一个位置的随机访问迭代器。
cbegin()和 begin() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素。
cend()和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crbegin()和 rbegin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
crend()和 rend() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改元素。
size()返回容器中当前元素的数量,其值始终等于初始化 array 类的第二个模板参数 N。
max_size()返回容器可容纳元素的最大数量,其值始终等于初始化 array 类的第二个模板参数 N。
empty()判断容器是否为空,和通过 size()==0 的判断条件功能相同,但其效率可能更快。
at(n)返回容器中 n 位置处元素的引用,该函数 自动检查 n 是否在有效的范围内,如果不是则抛出 out_of_range 异常
正是由于 array 容器中包含了 at() 这样的成员函数,使得操作元素时比普通数组更安全。
front()返回容器中第一个元素的直接引用,该函数不适用于空的 array 容器。
back()返回容器中最后一个元素的直接应用,该函数同样不适用于空的 array 容器。
data()返回一个指向容器首个元素的指针。利用该指针,可实现复制容器中所有元素等类似功能。
fill(val)将 val 这个值赋值给容器中的每个元素。
array1.swap(array2)交换 array1 和 array2 容器中的所有元素,但前提是它们具有相同的长度和类型。
  • 在 <array> 头文件中还重载了 get() 全局函数,该重载函数的功能是访问容器中指定的元素,并返回该元素的引用。

实例

#include <iostream>
#include <array>
using namespace std;

int main()
{
    array<int, 4> values{};
    int y[] = { 3,1,4,5 };

    //初始化 values 容器
    for (int i = 0; i < values.size(); i++) {
        values.at(i) = y[i];
    }

    //使用 get() 重载函数输出指定位置元素
    cout << get<3>(values) << endl;

    //如果容器不为空,则输出容器中所有的元素
    if (!values.empty()) {
        for (auto val = values.begin(); val < values.end(); val++) {
            cout << *val << " ";
        }
    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web3钱包开发获取测试币-Base Sepolia(二)

Web3钱包开发获取测试币-Base Sepolia(二) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b0c0ac86b04a496087471388532bc54a.png) 基于上篇 Web3钱包开发获取测试币-Polygon Mumbai(一) &#xff1a;https://suwu150.blog.csdn.net/article/details/137949473 我…

呼市经开区建设服务项目水、电能耗监测 数采案例

一、项目背景及需求 项目地点位于内蒙古呼和浩特市&#xff0c;呼市数字经开区建设服务项目。属于企业用能数据采集、能耗监测板块子项目。 针对水、电能耗数据采集&#xff0c;结合现场客观因素制约&#xff0c;数据采集方面存在较大难度。大多数国网电表485接口由于封签限制…

WordPress 告别 MySQL:Docker SQLite WordPress

本篇文章聊聊&#xff0c;如何将这个持续诞生和维护了 21 年的开源软件“脱离数据库”运行&#xff0c;让它能够更加轻量、适合低成本离线运行。 写在前面 2003 年&#xff0c;Michel Valdrighi 基于 b2/cafelog 创建了开源软件 WordPress&#xff0c;并在 GPL 协议下发布。 …

【ARM Trace32(劳特巴赫) 使用介绍 12.1 -- Trace32 读写 64位地址】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 读写 64位地址读 64 位地址写64位地址Trace32 读写 64位地址 在使用TRACE32进行调试时,有时需要读取或操作64位的地址,特别是在处理64位的处理器或操作系统时。以下是如何在TRACE32中读取64位地址的一般方法。 读 64 位地…

Hadoop大数据处理技术-配置连接篇

​2024/4/17 Hadoop学习前的准备 3&#xff09;连接虚拟机 上一节配置完成了基础的虚拟机配置及网络配置 下面我们开始建立连接 我们为什么要与虚拟机建立链接呢&#xff1f; 连接虚拟机就好像跟亲友联系一样 总得找个便捷又好用的工具才行 Secure CRT就像是一把能打开通向…

高斯过程回归【详细数学推导】

机器学习笔记 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例】 第八章 主成分分析【PCA降维】 第九章 隐马尔可夫模型 第十章 奇异值分解 第十一章 熵…

AI-数学-高中-39空间向量-2空间向量法(法向量)

原作者视频&#xff1a;【空间向量】【一数辞典】2空间向量法&#xff08;重要&#xff09;_哔哩哔哩_bilibili 法向量&#xff08;高中阶段所有与面的关系&#xff0c;都可以通过法向量去证明和解答&#xff09;&#xff1a; 是空间解析几何的一个概念&#xff0c;垂直于平面…

JAVA学习笔记28(常用类)

1.常用类 1.1 包装类 1.包装类的分类 ​ 1.针对八中基本数据类型相应的引用类型–包装类 ​ 2.有了类的特点&#xff0c;就可以调用类中的方法 2.包装类和基本数据类型的转换 ​ *装箱&#xff1a;基本类型 --> 包装类型 //手动装箱 int n1 100; Integer integer ne…

上市公司-企业数据要素利用水平数据集及参考文献(2010-2022年)

01、数据介绍 企业数据要素利用水平是指企业在其生产经营活动中&#xff0c;对数据的收集、处理、分析和应用的能力及效果。这种利用水平的高低直接反映了企业在数字化时代中的竞争力和创新能力。 本数据参考《中央财经大学学报》史青春&#xff08;2023&#xff09;老师的研…

Excel文件解析--超大Excel文件读写

使用POI写入 当我们想在Excel文件中写入100w条数据时&#xff0c;我们用普通的XSSFWorkbook对象写入时会发现&#xff0c;只有在将100w条数据全部加载入内存后才会用write()方法统一写入&#xff0c;这样效率很低&#xff0c;所以我们引入了SXSSFWorkbook进行超大Excel文件的读…

javaWeb项目-网吧网咖管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JAVA简介 JavaSc…

本地环境通过ssh通道连接服务器数据库,实现本地客户端和代码可以访问数据库

使用方法&#xff1a; ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 搭建隧道的账号搭建隧道的ip 可以增加参数-v,输出更多的信息 ssh -p 搭建隧道的端口 -fNL 本地端口:远程ip:远程端口号 -v 搭建隧道的账号搭建隧道的ip 有时候&#xff0c;测试环境的数据库不允许…

深度卷积神经网络的整体运行流程(以alexnet为例)

0.基础概念&#xff08;复习一下&#xff09; 1.小批量随机梯度下降 目的&#xff1a; 希望找到最佳的参数&#xff0c;使损失函数最小。 使损失函数对w求导&#xff08;b就是x等于1的w&#xff09;&#xff0c;一个小批次的/eta&#xff08;学习率&#xff09;*小批次的平均…

hexo配置教程、主题使用及涉及的技术学习

一、背景 最近,一直想做一个属于自己的网站.可以从零开始搭建一个网站,顺便可以把日常中学到的技术用于实战,还可以顺便记录自己的所思所感,记录成长的过程. 方案 一开始的方案是从零开始,模仿常见个人博客的设计,基于vueSpringbootMySQL的去实现网站. 新建项目之后,发现vu…

【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法)

目录 UDP协议 UDP协议的报文结构及注意事项 UDP报文结构中的校验和字段 1. 校验和主要校验的内容 2. UDP校验和的实现方式 3. CRC&#xff08;循环冗余校验&#xff09;算法 4. MD5&#xff08;Message Digest Algorithm 5&#xff09; UDP协议 上一篇文章提过&#xf…

Linux cmake 初窥【1】

1.开发背景 linux 下编译程序需要用到对应的 Makefile&#xff0c;用于编译应用程序&#xff0c;但是 Makefile 的语法过于繁杂&#xff0c;甚至有些反人类&#xff0c;所以这里引用了cmake&#xff0c;cmake 其中一个主要功能就是用于生成 Makefile&#xff0c;cmake 的语法更…

吴恩达深度学习 (week5,6)

文章目录 一、训练开发测试集二、机器学习基础三、 正则化初步介绍四、Dropout 正则化五、其他正则化方法六、归一化输入介绍七、梯度消失与梯度爆炸八、神经网络的权重初始化九、梯度数值逼近和检验十、上述学习总结第一题 划分训练/开发/测试集第二题 开发和测试集分布第三题…

谷粒商城学习笔记

1.系统架构 2.环境准备 21.安装Linux 1.VirtualBox: https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-Win.exe 2.安装 Vagrant 1).Vagrant 下载地址: https://releases.hashicorp.com/vagrant/2.2.5/vagrant_2.2.5_x86_64.msi https://www…

Obsidian 快速安装

看网上Obsidian 很好用&#xff0c;但自己下载总是中断&#xff0c;烦的要死&#xff0c;一度以为要开魔法…… 直到我找到了这个网站Thoughts (teambition.com) yeah~ 亲测有效&#xff0c;大概不到2min吧. 快速开始~&#xff0c;成功水了一片

海外服务器被恶意攻击怎么办

如果您的海外服务器遭受了恶意攻击&#xff0c;以下是一些应对措施和步骤&#xff0c;立即隔离服务器。如果您察觉到服务器受到恶意攻击&#xff0c;立即隔离服务器&#xff0c;将其与网络隔离&#xff0c;以防止攻机进一步扩散。通知服务器提供商&#xff0c;以便他们能够提供…