当前位置: 首页 > news >正文

STL容器之<array>

文章目录

    • 测试环境
    • array介绍
    • 头文件
    • 模块类定义
    • 对象构造
    • 初始化
    • 元素访问
    • 容器大小
    • 迭代器
    • 其他函数

测试环境

系统:ubuntu 22.04.2 LTS 64位
gcc版本:11.3.0
编辑器:vsCode 1.76.2

array介绍

array是固定大小的序列式容器,它包含按严格的线性序列排列的特定数量的元素。与其他容器不同,array具有固定的大小,并且不通过分配器管理其元素的分配,因此其不能动态的扩展和收缩。(零大小的数组是有效的)。元素存储在连续的内存位置中,大小是编译时常数,没有内存或时间开销

头文件

#include <array>

模块类定义

_Tp:表示自定义数据类型
_Nm:表示_Ty的数量

template <class Tp, std::size_t _Nm> class array;

对象构造

/* (默认构造函数)构造一个包含10个int类型的数组对象 */
std:array<int, 10> arrInt;  
/* (拷贝构造函数)使用arrInt构造一个相同的数组对象 */
std::array<int, 10> arrInt1(arrInt)
/* 构造0长数组 */
std::array<int, 0> arrZero;
/* 二维数组构造,多维数组同理 */
std::array<std::array<int, 10>, 10> arrInt2;

初始化

/* 使用初始化列表进行初始化 */
arrInt = {0,1,2,3,4,5,6,7,8,9};

元素访问

函数名返回值功能
[]指定元素的值访问元素
at()指定元素的引用访问元素
front()首元素的引用获取首元素
back()元素的引用获取末尾元素
data()首元素的地址获取指向首元素的指针
/* 使用下标运算符访问元素并赋值 */
for (int i = 0; i < 10; i++)
{std::cout<< arrInt[i] << " ";
}
/* 使用at访问元素并赋值 */
for (int i = 0; i < 10; i++)
{std::cout << arrInt.at(i) << " ";
}
/* 取数组第一个和最后一个元素,返回值类型为元素的引用,注:0长度数组不能使用,运行时后出错 */
std::cout << arrInt.front() << " " << arrInt.back() << std::endl;
/* 获取指向数组头的指针 */
int *p = arrInt.data();

注:front()和back()不能用于获取0长度数组的元素。

容器大小

函数返回值功能
empty()bool判断array是否为空,为空返回true,不为空返回false
size()std:size_t获取数组长度
max_size()std::size_t获取数组的最大长度与size()相同
/* 判断数组是否为空, 返回值为bool类型,数组为空返回true,否则返回false,只有0长度数组返回true */
std::cout << arrInt.empty() << std::endl;
/* 获取数组大小,注:max_size在array中获取的大小与size相同,其他容器中可能大小不一致*/
std::cout << arrInt.size() << " " << arrInt.max_size() << std::endl;

注:empty()只有0长度数组才会返回true;size()和max_size()获取的大小始终相同为数组长度。

迭代器

类型功能
iterator正向随机访问迭代器。从前向后访问元素,可以读取也可以修改
const_iterator常量正向随机访问迭代器。从前向后访问元素,只能读取不能修改
reverse_iterator逆向随机访问迭代器。从后向前访问元素,可以读取也可以修改
const_reverse_iterator常量逆向随机访问迭代器。从后向前访问元素,只能读取不能修改
函数返回值功能
begin()正向随机访问迭代器返回指向array对象首元素所在位置的迭代器
end()正向随机访问迭代器返回指向array对象末尾元素的下一个位置的迭代器
cbegin()常量正向随机访问迭代器返回指向array对象首元素所在位置的常量迭代器
cend()常量正向随机访问迭代器返回指向array对象末尾元素的下一个位置的迭代器
rbegin()逆向随机访问迭代器返回指向array对象末尾元素位置的迭代器
rend()逆向随机访问迭代器返回指向array对象首元素的前一个位置的迭代器
crbegin()常量逆向随机访问迭代器返回指向array对象末尾元素位置的常量迭代器
crend()常量逆向随机访问迭代器返回指向array对象首元素的前一个位置的常量迭代器
/*正向随机访问迭代器,每个元素+10,并打印输出(10 11 12 13 14 15 16 17 18 19)*/
std::array<int, 10>::iterator itr;
for (itr = arrInt.begin(); itr != arrInt.end(); itr++)
{/* 修改元素值每个元素+10 */*itr += 10; /* 访问元素 */std::cout << *itr << " ";
}/*常量正向随机访问迭代器,并打印输出(10 11 12 13 14 15 16 17 18 19)*/
std::array<int, 10>::const_iterator cItr;
for (cItr = arrInt.begin(); cItr != arrInt.end(); cItr++)
{/* 不允许修改值,编译报错 *///*cItr += 10; /* 访问元素 */std::cout << *cItr << " ";
}/*逆向随机访问迭代器,每个元素+100,并打印输出(119 118 117 116 115 114 113 112 111 100)*/
std::array<int, 10>::reverse_iterator rItr;
for (rItr= arrInt.rbegin(); rItr!= arrInt.rend(); rItr++)
{/* 修改元素值 */*rItr += 100; /* 访问元素 */std::cout << *rItr << " ";
}/*常量逆向随机访问迭代器,并打印输出(119 118 117 116 115 114 113 112 111 100)*/
std::array<int, 10>::const_reverse_iterator crItr;
for (crItr= arrInt.crbegin(); crItr!= arrInt.crend(); crItr++)
{/* 不允许修改元素值, 编译报错 *///*crItr += 100; /* 访问元素 */std::cout << *crItr << " ";
}

其他函数

函数返回值功能
fill()将array中的所有元素用指定的元素进行填充
swap()交换两个容器的元素
/* 数据填充,将数组所有元素填充为15,无返回值 */
arrInt.fill(15);
/*交互两个数组元素的值,无返回值*/
std::array<int, 5> arrTest1;
std::array<int, 5> arrTest2:
arrTest1.fill(10);
arrTest2.fill(15);
arrTest1.swap(arrTest2);

注:empty()只有0长度数组才会返回true;front()和back()不能用于获取0长度数组的元素。size()和max_size()获取的大小始终相同为数组长度。

相关文章:

STL容器之<array>

文章目录测试环境array介绍头文件模块类定义对象构造初始化元素访问容器大小迭代器其他函数测试环境 系统&#xff1a;ubuntu 22.04.2 LTS 64位 gcc版本&#xff1a;11.3.0 编辑器&#xff1a;vsCode 1.76.2 array介绍 array是固定大小的序列式容器&#xff0c;它包含按严格…...

flask教程6:cookie和session

文章目录一、cookie1.1 什么是cookie&#xff1f;1.2 使用cookie1.2.1 设置cookie1.2.2设置cookie的有效期1.2.3在Flask中查询cookie1.2.4删除cookie二、session2.1实现session的两种思路2.1.1 第一种2.1.2 第二种2.2使用session2.2 .1设置session2.2.2 设置有效期2.2.3 获取se…...

【JavaEE初阶】第六节.网络原理TCP/IP协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、TCP/IP协议五层协议栈&#xff1b; 1.1 应用层协议&#xff1b; 二、传输层协议&#xff1b; 2.1 UDP协议&#xff1b; 2.2 TCP协议&#xff1b; 2.…...

模式识别 —— 第六章 支持向量机(SVM)与核(Kernel)

模式识别 —— 第六章 支持向量机&#xff08;SVM&#xff09;与核&#xff08;Kernel&#xff09; 文章目录模式识别 —— 第六章 支持向量机&#xff08;SVM&#xff09;与核&#xff08;Kernel&#xff09;硬间隔&#xff08;Hard-Margin&#xff09;软间隔&#xff08;Soft…...

总结 synchronized

目录synchronized的特性1. 互斥2. 刷新内存3. 可重入synchronized的使用1. 直接修饰普通方法2. 修饰静态方法3. 修饰代码块synchronized的锁机制基本特点关键锁策略 : 锁升级synchronized的特性 1. 互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized…...

360周鸿祎又“开炮”:GPT 6-8就将产生自主意识!我们来测算一下对错

‍数据智能产业创新服务媒体——聚焦数智 改变商业近日&#xff0c;360的周鸿祎放言“GPT6到GPT8人工智能将会产生意识&#xff0c;变成新的物种。未来&#xff0c;人工智能大语言模型有可能实现自我进化&#xff0c;自动更新系统和自我升级&#xff0c;或者指数级进化能力&am…...

python——飞机大战小游戏

目录 1、导入模块 2、窗口操作 3、事件操作 4、长按事件 5、添加游戏背景 6、添加英雄飞机 7、获取飞机的图片矩形 8、基本游戏窗口 9、添加游戏窗口图片 10、英雄飞机登场 11、英雄飞机装备子弹并发射 1、enemy_plane 2、game_main 3、game_map 4、game_score …...

数组(完全二叉树)向下建堆法与堆排序O(N*logN)

TIPS AdjustUp & AdjustDown向上调整AdjustUp与向下调整AdjustDown的参数是一个数组&#xff08;完全二叉树&#xff09;需要进行调整操作的数值的下标/一个数组&#xff08;完全二叉树&#xff09;堆元素个数需要调整操作的数值的下标。实际上就是对完全二叉树当中的某一点…...

Lua require 函数使用

从 Lua 的用户文档中我们知道 require("modName") 函数是用来加载模块的&#xff0c;而如果这个modName已经用require 加载过的&#xff0c;再调用require时&#xff0c;将直接返回模块的值。因为函数首先查找 package.loaded 表&#xff0c; 检测 modName 是否被加载…...

【面试】如何定位线上问题?

这个面试题我在两年社招的时候遇到过&#xff0c;前几天面试也遇到了。我觉得我每一次都答得中规中矩&#xff0c;今天来梳理复盘下&#xff0c;下次又被问到的时候希望可以答得更好。 下一次我应该会按照这个思路去答&#xff1a; 1、如果线上出现了问题&#xff0c;我们更多…...

字节二面,原来我对自动化测试的理解太浅了

如果你入职一家新的公司&#xff0c;领导让你开展自动化测试&#xff0c;作为一个新人&#xff0c;你肯定会手忙脚乱&#xff0c;你会如何落地自动化测试呢&#xff1f; 01 什么是自动化 有很多人做了很长时间的自动化但却连自动化的概念都不清楚&#xff0c;这样的人也是很悲…...

Android11.0 应用升级成功后立即断电重启,版本恢复

问题&#xff1a;客户反馈内置的应用升级成功后立刻断电重启&#xff0c;应用的版本被恢复。 使用adb命令升级客户应用&#xff0c;查看版本显示已更新&#xff0c;/data/system目录下packages.xml和packages.xml中应用版本信息均已更新 C:\Users\dell>adb shell dumpsys …...

关于python常用软件用法:Pycharm 常用功能

人生苦短&#xff0c;我用python 一.Pycharm的基本使用 1.在Pycharm下为你的Python项目配置Python解释器 &#xff08;1&#xff09;.Setting>Project Interpreter>源码资料电子书:点击此处跳转文末名片获取 二.在Pycharm下创建Python文件、Python模块 1.File>New&g…...

SOLIDWORKS你不知道的小技巧

◉ SOLIDWORKS圆弧长度标注点智能标注&#xff0c;再选中该圆弧&#xff0c;然后分别点圆弧的两个端点&#xff0c;点击左键可以标注圆弧长度。◉ SOLIDWORKS强力裁剪剪裁实体中的强劲剪裁&#xff0c;除了可以裁剪实体外&#xff0c;还可以任意延伸实体。◉ SOLIDWORKS转折线转…...

有了HTTP,为啥还要用RPC

既然有 HTTP 请求&#xff0c;为什么还要用 RPC 调用&#xff1f; 一直以来都没有深究过RPC和HTTP的区别&#xff0c;不都是写一个服务然后在客户端调用么&#xff1f; HTTP和RPC最本质的区别&#xff0c;就是 RPC 主要是基于 TCP/IP 协议的&#xff0c;而 HTTP 服务主要是基…...

[leetcode] 动态规划

背包 先啃懂 背包九讲 01背包&#xff0c;即物品有限。 for 物品for 容量&#xff08;倒序&#xff09;P1048 [NOIP2005 普及组] 采药 [ 原题 | 题解 ] P1049 [NOIP2001 普及组] 装箱问题 [ 原题 | 题解 ] P1507 NASA的食物计划 [ 原题 | 题解 ] P1510 精卫填海 [ 原题 | 题…...

科大奥瑞物理实验——热电偶特性及其应用研究

实验名称&#xff1a;热电偶特性及其应用研究 1. 实验目的&#xff1a; 掌握电位差计的工作原理和结构特点&#xff1b;了解温差电偶测温的原理和方法&#xff1b;学会电位差计的使用及注意事项。 2. 实验器材&#xff1a; 电位差计 标准电池 光电检流计 稳压电源 温差电偶…...

Eclips快捷键大全(超详细)

Eclips快捷键大全&#xff08;超详细&#xff09;前言一、常用快捷键二、编辑快捷键三、导航快捷键四、运行和调试快捷键五、重构快捷键六、代码生成快捷键七、项目导航快捷键八、帮助快捷键九、搜索快捷键十、标记快捷键十一、版本控制快捷键十二、其它快捷键前言 本博主将用C…...

整懵了,蚂蚁金服4面成功拿下测开offer,涨薪10k,突然觉得跳槽也不是那么难

蚂蚁的面试挺独特的&#xff0c;每轮面试都没有HR约时间&#xff0c;一般是晚上8点左右面试官来一个电话&#xff0c;问是否能面试&#xff0c;能的话开始面&#xff0c;不能就约一个其他时间。 全程4面&#xff0c;前四面技术面&#xff0c;电话面试&#xff0c;最后一面是HR面…...

C++内存分布malloc-free-new-delete的区别和联系

目录 一、内存分布 1.1内存分布图&#xff1a; 1.2 为什么要将bss和data区分开呢&#xff1f; 1.3 堆和栈有什么区别 二、malloc、free&#xff1b;new、delete 2.1 new和delete是如何实现的&#xff0c;new与malloc的异同处 2.2既然有了malloc/free&#xff0c;C为什么还…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...