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

c++标准模板(STL)(std::array)(四)

定义于头文件 <array>
template<

    class T,
    std::size_t N

> struct array;
(C++11 起)

 std::array 是封装固定大小数组的容器。

此容器是一个聚合类型,其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数组,它不会自动退化成 T* 。它能作为聚合类型聚合初始化,只要有至多 N 个能转换成 T 的初始化器: std::array<int, 3> a = {1,2,3}; 。

该结构体结合了 C 风格数组的性能、可访问性与容器的优点,比如可获取大小、支持赋值、随机访问迭代器等。

std::array 满足容器 (Container) 和可逆容器 (ReversibleContainer) 的要求,除了默认构造的 array 是非空的,以及进行交换的复杂度是线性,它满足连续容器 (ContiguousContainer) (C++17 起)的要求并部分满足序列容器 (SequenceContainer) 的要求。

当其长度为零时 arrayN == 0 )有特殊情况。此时, array.begin() == array.end() ,并拥有某个唯一值。在零长 array 上调用 front() 或 back() 是未定义的。

亦可将 array 当做拥有 N 个同类型元素的元组。

迭代器非法化

按照规则,指向 array 的迭代器在 array 的生存期间决不非法化。然而要注意,在 swap 时,迭代器将继续指向同一 array 的元素,并将改变元素的值。

容量

检查容器是否为空

std::array<T,N>::empty

constexpr bool empty() const noexcept;

(C++11 起)
(C++20 前)

[[nodiscard]] constexpr bool empty() const noexcept;

(C++20 起)

 检查容器是否无元素,即是否 begin() == end() 。

参数

(无)

返回值

若容器为空则为 true ,否则为 false

复杂度

常数。

返回容纳的元素数

std::array<T,N>::size

size_type size() const noexcept;

(C++11 起)

返回容器中的元素数,即 std::distance(begin(), end()) 。

参数

(无)

返回值

容器中的元素数量。

复杂度

常数。

 

返回可容纳的最大元素数

std::array<T,N>::max_size

constexpr size_type max_size()  noexcept;

(C++11 起)
(C++14 前)

constexpr size_type max_size() const noexcept;

(C++14 起)

 返回根据系统或库实现限制的容器可保有的元素最大数量,即对于最大容器的 std::distance(begin(), end()) 。

参数

(无)

返回值

元素数量的最大值。

复杂度

常数。

注意

因为每个 std::array<T, N> 都是固定大小容器,故 max_size 返回的值等于 N (亦为 size 所返回的值)

操作

以指定值填充容器

std::array<T,N>::fill

void fill( const T& value );

(C++11 起)
(C++20 前)

constexpr void fill( const T& value );

(C++20 起)

 赋给定值 value 给容器中的所有元素。

参数

value-要赋给元素的值

返回值

(无)

复杂度

与容器大小成线性。

交换内容

std::array<T,N>::swap

void swap( array& other ) noexcept(/* see below */);

(C++11 起)
(C++20 前)

constexpr void swap( array& other ) noexcept(/* see below */);

(C++20 起)

将容器内容与 other 的内容交换。不导致迭代器和引用关联到别的容器。

参数

other-要与之交换内容的 array

返回值

(无)

异常

noexcept 规定:  

noexcept(noexcept(swap(std::declval<T&>(), std::declval<T&>())))

在以上表达式中,按照同 C++17 std::is_nothrow_swappable 特性所用的行为查找标识符 swap

(C++17 前)
noexcept 规定:  

noexcept(std::is_nothrow_swappable_v<T>)

(C++17 起)

对于零长 array ,noexcept 规定:  noexcept

复杂度

与容器大小成线性。

 

调用示例

#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>
#include <functional>
#include <time.h>
#include <array>using namespace std;struct Cell
{int x;int y;Cell() = default;Cell(int a, int b): x(a), y(b) {}Cell &operator +=(const Cell &cell){x += cell.x;y += cell.y;return *this;}Cell &operator +(const Cell &cell){x += cell.x;y += cell.y;return *this;}Cell &operator *(const Cell &cell){x *= cell.x;y *= cell.y;return *this;}Cell &operator ++(){x += 1;y += 1;return *this;}bool operator <(const Cell &cell) const{if (x == cell.x){return y < cell.y;}else{return x < cell.x;}}bool operator >(const Cell &cell) const{if (x == cell.x){return y > cell.y;}else{return x > cell.x;}}bool operator ==(const Cell &cell) const{return x == cell.x && y == cell.y;}
};std::ostream &operator<<(std::ostream &os, const Cell &cell)
{os << "{" << cell.x << "," << cell.y << "}";return os;
}using namespace std;int main()
{std::cout << std::boolalpha;std::mt19937 g{std::random_device{}()};srand((unsigned)time(NULL));auto generate = [](){int n = std::rand() % 10 + 110;Cell cell{n, n};return cell;};//遵循聚合初始化的规则初始化 array (注意默认初始化可以导致非类的 T 的不确定值)std::array<Cell, 6> array1;std::cout << "array1:   ";std::copy(array1.begin(), array1.end(), std::ostream_iterator<Cell>(std::cout, " "));std::cout << std::endl;std::generate(array1.begin(), array1.end(), generate);std::cout << "array1:   ";std::copy(array1.begin(), array1.end(), std::ostream_iterator<Cell>(std::cout, " "));std::cout << std::endl;std::cout << std::endl;//检查容器是否无元素,即是否 begin() == end() 。std::cout << "array1 empty: " << array1.empty() << std::endl;std::array<Cell, 0> array2;std::cout << "array2 empty: " << array2.empty() << std::endl;std::cout << std::endl;//返回容器中的元素数,即 std::distance(begin(), end()) 。std::cout << "array1 contains " << array1.size() << " elements." << std::endl;std::cout << "array2 contains " << array2.size() << " elements." << std::endl;std::cout << std::endl;//返回根据系统或库实现限制的容器可保有的元素最大数量,即对于最大容器的 std::distance(begin(), end()) 。std::cout << std::endl;std::cout << "array1 max_size " << array1.max_size() << std::endl;std::cout << "array2 max_size " << array2.max_size() << std::endl;std::cout << std::endl;//赋给定值 value 给容器中的所有元素。Cell cell = generate();array1.fill(cell);std::cout << "array1.fill( " << cell << " )" << std::endl;std::cout << "array1:   ";std::copy(array1.begin(), array1.end(), std::ostream_iterator<Cell>(std::cout, " "));std::cout << std::endl;std::cout << std::endl;std::array<Cell, 6> array3;std::generate(array3.begin(), array3.end(), generate);std::cout << "swap before:" << std::endl;std::cout << "array1:   ";std::copy(array1.begin(), array1.end(), std::ostream_iterator<Cell>(std::cout, " "));std::cout << std::endl;std::cout << "array3:   ";std::copy(array3.begin(), array3.end(), std::ostream_iterator<Cell>(std::cout, " "));std::cout << std::endl;//将容器内容与 other 的内容交换。不导致迭代器和引用关联到别的容器。array1.swap(array3);std::cout << "swap after:" << std::endl;std::cout << "array1:   ";std::copy(array1.begin(), array1.end(), std::ostream_iterator<Cell>(std::cout, " "));std::cout << std::endl;std::cout << "array3:   ";std::copy(array3.begin(), array3.end(), std::ostream_iterator<Cell>(std::cout, " "));std::cout << std::endl;std::cout << std::endl;return 0;
}

输出

 

相关文章:

c++标准模板(STL)(std::array)(四)

定义于头文件 <array> template< class T, std::size_t N > struct array;(C11 起) std::array 是封装固定大小数组的容器。 此容器是一个聚合类型&#xff0c;其语义等同于保有一个 C 风格数组 T[N] 作为其唯一非静态数据成员的结构体。不同于 C 风格数…...

vue3计算属性

计算属性 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。推荐使用计算属性来描述依赖响应式状态的复杂逻辑 基础示例 不够好的示例 模板中使用了表达式&#xff0c;不够直观&…...

Java 中的访问修饰符有哪些(九)

Java 中的访问修饰符用于限制类、接口、字段和方法的访问范围&#xff0c;它们分别表示不同的访问控制级别。Java 中共有四种访问修饰符&#xff1a;public、protected、default 和 private。 public public 是最开放的访问修饰符&#xff0c;用于指定公共访问级别。被 publi…...

HR员工管理的三重境界:管事、管人、管心

在一个公司里&#xff0c;员工来来往往是常态&#xff0c;虽说我们不能替他们决定&#xff0c;但是一定是与公司的管理者有一定的关系。马云曾经说过&#xff1a;“一个员工离职&#xff0c;不外乎两种原因&#xff0c;一是钱没给到位&#xff1b;二是心里委屈了”。一句话就是…...

延迟队列与SpringBoot实战

延迟队列与SpringBoot实战 概念 延时队列,队列内部是有序的&#xff0c;最重要的特性就体现在它的延时属性上&#xff0c;延时队列中的元素是希望在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列 …...

【算法】九键输入法

题目&#xff1a; 输入数字字符串, 输出这串字符对应的九键输入法有可能出现的所有情况 算法&#xff1a; 定义了一个全局变量 g_numStr&#xff0c;其中存储了每个数字对应的字母。定义了一个递归函数 str_combine&#xff0c;用于将每个数字对应的字母进行组合。str_combin…...

jvm之类加载器

写在前面 当我们通过javac命令将java源代码编译为Java字节码后&#xff0c;必须通过类加载器将其加载到jvm中才能运行&#xff0c;所以类加载器是jvm中非常重要的一个组成部分&#xff0c;本文我们就一起来看下吧&#xff01; 1&#xff1a;类的生命周期 类的生命周期如下图…...

Chapter4:频率响应法(上)

第四章:频率响应法 Exercise4.1 已知微分网络和积分网络电路图如下图所示,求网络的频率特性。 解: 【图 ( a ) ({\rm a}) (a)微分网络】 由微分网络电路图可得:...

【6. 激光雷达接入ROS】

欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】&#x1f973;&#x1f973;&#x1f973; 2345VOR鹏鹏主页&#xff1a; 已获得CSDN《嵌入式领域优质创作者》称号&#x1f47b;&#x1f47b;&#x1f47b;&#xff0c;座右铭&#xff1a;脚踏实地&#xff0c;仰望星空&#…...

Java 基础进阶篇(三)—— 面向对象的三大特征之二:继承

文章目录 一、继承概述二、内存运行原理 ★三、继承的特点四、继承后&#xff1a;成员变量和方法的访问特点五、继承后&#xff1a;方法重写六、继承后&#xff1a;子类构造器的特点七、继承后&#xff1a;子类构造器访问父类有参构造器八、this、super 总结 一、继承概述 Jav…...

[angstromctf 2023] 部分

这个比赛打了个开头就放弃了&#xff0c;最近放弃的比较多&#xff0c;国外的网太慢&#xff0c;国内的题太难。 Crypto ranch 这题直接给出密文这提示 rtkw{cf0bj_czbv_nvcc_y4mv_kf_kip_re0kyvi_uivjj1ex_5vw89s3r44901831} Caesar dressing is so 44 BC... 然后是加密程序…...

死信队列

死信队列 死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到queue 里了&#xff0c;consumer 从 queue 取出消息…...

基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)

摘要&#xff1a;本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现&#xff0c;用于智能检测物体种类并记录和保存结果&#xff0c;对各种物体检测结果可视化&#xff0c;提高目标识别的便捷性和准确性。本文详细阐述了目标检测系统的原理&#xff0c;并给出MATLAB的实现代码…...

使用ChatGPT工具阅读文献的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

实训笔记1

实训笔记 第一天 1.安装tomcat或者其他大数据开发的路径不含中文及空格 2.和同开发 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoApp1oX-1683039421826)(C:\Users\18249\AppData\Roaming\Typora\typora-user-images\image-20230422110823748…...

CCD视觉检测设备如何选择光源

CCD视觉检测设备的机器视觉系统对光源的要求很高&#xff0c;光源是决定图像质量的一个重要因素。那么&#xff0c;我们就来看看CCD图像加网设备和机器视觉系统光源的选择点——CCD图像加网设备。 CCD视觉检测设备机器视觉系统光源选择要点&#xff1a; 1. 对比度&#xff1a;…...

基于协同过滤的旅游推荐系统设计与实现(论文+源码)_kaic

1 绪论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 研究目标与意义 1.4 主要研究工作 2 相关理论介绍 2.1HTML与JavaScript 2.2 MySQL数据库 2.3 协同过滤算法简介 3 系统分析与设计 3.1 系统需求分析 3.1.1 功能性需求 3.1.2 安全性需求 3.2 系统总体架构 3.3 功能模块设计 3…...

代码随想录补打卡 746 使用最小花费爬楼梯

代码如下 func minCostClimbingStairs(cost []int) int { dp : make([]int,len(cost)1) //思路&#xff1a;设置一个花费数组dp&#xff0c;dp数组的长度等于之前的cost在加上1&#xff08;1为楼顶元素&#xff09; dp[0] 0 dp[1] 0 for i : 2 ; i < len(c…...

有理函数的不定积分习题

前置知识&#xff1a;有理函数的不定积分 习题 计算 ∫ x 3 1 x 4 − 3 x 3 3 x 2 − x d x \int \dfrac{x^31}{x^4-3x^33x^2-x}dx ∫x4−3x33x2−xx31​dx 解&#xff1a; \qquad 将被积函数的分母因式分解得 x 4 − 3 x 3 3 x 2 − x x ( x − 1 ) 3 x^4-3x^33x^2-xx…...

PS滤镜插件-Nik Collection介绍

PS滤镜插件-Nik Collection介绍 什么是Nik CollectionNik Collection都包含什么&#xff1f; 什么是Nik Collection Nik Collection是一款PS滤镜插件套装&#xff0c;其包含了八款PS插件&#xff0c;功能涵盖修图、调色、降噪、胶片滤镜等方面。Nik Collection 作为很多摄影师…...

LFM2.5-1.2B-Thinking-GGUF环境配置:Docker内服务端口映射与外网访问调试

LFM2.5-1.2B-Thinking-GGUF环境配置&#xff1a;Docker内服务端口映射与外网访问调试 1. 平台简介与核心优势 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型&#xff0c;专为低资源环境优化设计。该镜像内置GGUF模型文件和llama.cpp运行时&#xff0c;提供简…...

一、硬件接线与配置

自动配料控制系统 S7-200SMART 与组态王6.55联机程序 COM3串口通讯 带运行效果视频 IO表 和 PLC接线图CAD 老规矩先看IO表——配料系统核心是4路称重传感器2台变频器控制下料速度。PLC的EM AE04模块接0-10V称重信号&#xff0c;EM DR32数字量模块控制接触器和报警灯。CAD接线图…...

用 AI 养了一个“女朋友“:陪聊 + 自拍功能完全指南

免责声明&#xff1a;Clawra 是 AI&#xff0c;不会真的爱你。但她会在你孤独的深夜发一张咖啡馆自拍&#xff0c;这已经比很多人强了。 她是谁&#xff1f; Clawra 是内置在 im-claude 里的 AI 人设角色&#xff0c;通过 Telegram Bot 和你聊天。你也可以给她其他的名字&…...

MT5中文数据增强神器:无需训练,直接生成多样化的句子变体

MT5中文数据增强神器&#xff1a;无需训练&#xff0c;直接生成多样化的句子变体 1. 为什么需要中文文本数据增强 在自然语言处理领域&#xff0c;数据是模型训练的基础。但获取高质量的中文标注数据往往面临三大难题&#xff1a; 数据稀缺&#xff1a;特定领域&#xff08;…...

零基础玩转OpenClaw:星图GPU百川2-13B量化镜像体验报告

零基础玩转OpenClaw&#xff1a;星图GPU百川2-13B量化镜像体验报告 1. 为什么选择星图平台的OpenClaw镜像 作为一个长期关注AI工具但苦于本地配置复杂度的普通用户&#xff0c;当我发现星图平台提供预装OpenClaw和百川2-13B量化模型的"开箱即用"镜像时&#xff0c;…...

零基础掌握Degrees of Lewdity本地化工具:开源项目中文适配方案全攻略

零基础掌握Degrees of Lewdity本地化工具&#xff1a;开源项目中文适配方案全攻略 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Lo…...

深入解析UniApp中的package.json:从基础配置到高级技巧

1. 初识UniApp中的package.json 第一次接触UniApp项目时&#xff0c;我盯着package.json文件看了半天&#xff0c;心想这不就是个管理npm包依赖的配置文件吗&#xff1f;直到踩了几个坑才发现&#xff0c;UniApp对这个文件做了特殊扩展&#xff0c;让它成为了项目配置的中枢神经…...

AutoGen Studio中的强化学习应用:智能决策系统开发

AutoGen Studio中的强化学习应用&#xff1a;智能决策系统开发 1. 引言 想象一下&#xff0c;你正在构建一个智能决策系统&#xff0c;需要让多个AI代理协同工作&#xff0c;像一支训练有素的团队一样做出复杂决策。传统方法需要大量编码和调试&#xff0c;但现在有了AutoGen…...

基于模型的增程式混合动力汽车整车策略开发与建模

基于模型的整车策略开发思路、整车模型搭建流程&#xff0c;增程式混合动力汽车建模仿真模型&#xff0c;增程纯电&#xff0c;类似Nisson的e-power整车配置策略 具体内容包括&#xff1a;增程器模型、电机模型、电池模型&#xff0c;驾驶员模型&#xff0c;整车VCU控制模型等 …...

2026知网AIGC检测算法升级,降AI率工具还能有效降论文ai率吗?

2026知网AIGC检测算法升级&#xff0c;降AI率工具还能有效降论文ai率吗&#xff1f; 每到毕业季&#xff0c;关于知网AIGC检测的消息都会在各大高校论坛炸开锅。2026年春季学期刚开始&#xff0c;知网就放出了一个让无数毕业生心头一紧的消息——AIGC检测算法完成了新一轮升级。…...