uniform initialization(一致化初始化)

目录

std::initializer_list 和 std::array

         std::initializer_list 的作用:

         std::array 的作用:

std::initializer_list 和 std::array 使用联系 

标准库里面的initializer_list 使用

         vector


std::initializer_liststd::array

std::initializer_liststd::array 是用于不同目的的两个工具,它们各自有其优势和适用场景。

std::initializer_list 的作用:

void exampleFunction(std::initializer_list<int> values) { // 处理传入的初始化列表 } // 调用 exampleFunction({1, 2, 3, 4, 45}); 
  • 初始化列表的方便性: std::initializer_list 提供了一种方便的语法,允许使用花括号 {} 直接初始化列表,而不需要显式地创建数组。
  • 适应不同数量的参数: std::initializer_list 允许在函数和构造函数的参数中以初始化列表的形式接收多个参数,而且不限制参数个数。这使得函数更加灵活,能够适应不同数量的参数。
  • 自动大小: std::initializer_list 会自动记录初始化列表的大小,而不需要手动指定数组大小。

std::array 的作用:

  • 静态数组: std::array 是一个静态数组容器,其大小在编译时确定。它提供了数组的所有特性,如随机访问、迭代器支持等。
  • 类型安全: std::array 提供了类型安全的数组访问,而且它知道自己的大小,可以通过成员函数获取大小。
  • 支持STL算法: 由于 std::array 符合 STL 容器的接口,因此可以直接使用许多标准库算法。
#include <array> #include <algorithm> std::array<int, 5> arr = {1, 2, 3, 4, 45}; // 使用 STL 算法 std::sort(arr.begin(), arr.end()); 

选择使用哪个取决于具体的需求。如果你需要一个动态数量的参数集合,并且方便地进行初始化和传递,那么 std::initializer_list 可能更适合。如果你需要一个静态大小的数组,而且想要利用数组的其他特性,那么 std::array 可能更为合适。在某些情况下,它们也可以一起使用,根据具体情况选择更适合的工具。

std::initializer_liststd::array 使用联系 

在使用初始化列表语法创建std::initializer_list对象时,编译器会在后台创建一个临时的数组array,并将该数组的地址和大小作为参数传递给std::initializer_list的构造函数。

std::initializer_list<int> vals{1, 2, 3, 4, 45}; 

在这里,编译器会在内部创建一个包含整数1、2、3、4、45的数组,然后将该数组的地址和大小传递给std::initializer_list<int>的构造函数。这个构造函数接受一个指向数组的指针和数组的大小,以便在std::initializer_list对象内部维护这些信息。

所以,在实际情况中,std::initializer_list对象是基于一个临时数组构造的。这个临时数组的生命周期将与std::initializer_list对象的生命周期一样,它只存在于初始化期间,而不会被保留下来。

initializer_list 的初始化只是浅拷贝,不是深拷贝

标准库里面的initializer_list 使用

标准库里面使用了很多的initializer_list 使得参数个数多样性

vector

 /***  @brief  Builds a %vector from an initializer list.*  @param  __l  An initializer_list.*  @param  __a  An allocator.**  Create a %vector consisting of copies of the elements in the*  initializer_list @a __l.**  This will call the element type's copy constructor N times*  (where N is @a __l.size()) and do no memory reallocation.*/vector(initializer_list<value_type> __l,const allocator_type& __a = allocator_type()): _Base(__a){_M_range_initialize(__l.begin(), __l.end(),random_access_iterator_tag());}

vector存在一个  vector(initializer_list<value_type> __l,
         const allocator_type& __a = allocator_type())
      : _Base(__a)的构造函数 ,参数接受(initializer_list<value_type>

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

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

相关文章

RabbitMQ实战指南(二)—— 基本概念

RabbitMQ实战指南&#xff08;二&#xff09;—— 基本概念 RabbitMQ是一个开源的消息中间件&#xff0c;用于在应用程序之间进行可靠的消息传递。它遵循AMQP&#xff08;高级消息队列协议&#xff09;标准&#xff0c;支持多种编程语言和平台。 下面是RabbitMQ的基本概念&…

qt内存自动释放的两种情况

qt内存管理机制 QObject的parent 我们时常能看到QWidget或者其他的控件的构造函数中有一项参数parent&#xff0c;默认值都为NULL&#xff0c;例如&#xff1a; QLineEdit(const QString &contents, QWidget *parent nullptr); QWidget(QWidget *parent nullptr, Qt::…

vue3学习——初始化项目及配置

初始化项目 环境 node 16pnpm 8.0.0 命令 pnpm create vite进行以下选择 &#x1f447; – 项目名 – VUe – Ts – cd/目录 – pnpm run dev 浏览器自动打开 package.json 配置eslint 安装依赖包 pnpm i eslint -D npx eslint --init // 生成配置文件进行以下选择 &a…

【2024】大三寒假再回首:缺乏自我意识是毒药,反思和回顾是解药

2024年初&#xff0c;学习状态回顾 开稿时间&#xff1a;2024-1-23 归家百里去&#xff0c;飘雪送客迟。 搁笔日又久&#xff0c;一顾迷惘时。 我们饱含着过去的习惯&#xff0c;缺乏自我意识是毒药&#xff0c;反思和回顾是解药。 文章目录 2024年初&#xff0c;学习状态回顾一…

vue——实现多行粘贴到table事件——技能提升

最近在写后台管理系统时&#xff0c;遇到一个需求&#xff0c;就是要从excel表格中复制多行内容&#xff0c;然后粘贴到后台系统中的table表格中。 如下图所示&#xff1a;一次性复制三行内容&#xff0c;光标放在红框中的第一个框中&#xff0c;然后按ctrlv粘贴事件&#xff0…

掌上医院预约挂号缴费系统源码,与医院信息系统共享数据,实现在线预约挂号、移动支付、医保支付、检验检查报告查看、门诊病历查询等功能。

随着信息技术的发展和互联网的普及&#xff0c;越来越多的患者开始习惯于通过互联网获取医疗服务。网上预约挂号是近年来开展的一项便民就医服务&#xff0c;旨在缓解看病难、挂号难的就医难题&#xff0c;许多患者为看一次病要跑很多次医院&#xff0c;最终还不一定能保证看得…

MySQL数据控制语言DCL

MySQL数据控制语言DCL 目录 MySQL数据控制语言DCLDCL关键字1.事务事务的四大特性START TRANSACTION&#xff1a;开始事务ROLLBACK&#xff1a;回滚COMMIT&#xff1a;提交事务 2.用户权限CREATE USER&#xff1a;创建新的用户并指定权限DROP USER&#xff1a;删除用户ALTER USE…

深度强化学习(王树森)笔记10

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

LeetCode —— 17. 电话号码的字母组合

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

基于人体姿态的目标追踪实现

文章目录 概要人体姿态识别人体关键点转检测框实时跟踪器概要 这篇博文简单介绍了如何实现基于人体姿态的多目标跟踪算法。主要分为以下几个步骤: 基于FastDeploy实现人体姿态识别;将人体姿态转化为检测框;基于SORT算法实现目标跟踪。人体姿态识别 参考Fastdeploy实现。 模…

Ubuntu系统硬盘分区攻略(磁盘分区、RAID磁盘阵列、RAID阵列、固态硬盘分区、机械硬盘分区、swap分区、swap交换分区)

文章目录 分区需求分区方案分区顺序相关疑问swap分区不是应该放在最后吗&#xff1f;我安装系统分区的时候&#xff0c;上面有available devices&#xff0c;下面有create software raid(md)&#xff0c;我该用哪个&#xff1f;我available devices下面有个893G的固态&#xff…

Selenium自动化测试 —— 模拟鼠标键盘的操作事件

鼠标操作事件 在实际的web产品测试中&#xff0c;对于鼠标的操作&#xff0c;不单单只有click()&#xff0c;有时候还要用到右击、双击、拖动等操作&#xff0c;这些操作包含在ActionChains类中。 ActionChains类中鼠标操作常用方法&#xff1a; 首先导入ActionChains类&#…

Python OpenCV实现图片像素区域缩放

Python OpenCV实现图片像素区域缩放 前言项目安装OpenCV和Pillow思路代码编写 前言 遇到一个要将大量图片缩放成统一规格的难题&#xff0c;并且这些图片周围还有很多空白像素&#xff0c;所以用Python实现一下。 项目 安装OpenCV和Pillow pip install opencv-python pip …

C++:异常体系

异常体系 异常1.C语言传统的处理错误的方式2.C异常概念3.异常的使用3.1异常的抛出和捕获3.2 异常的重新抛出3.3异常安全3.4 异常规范 4.C标准库的异常体系5.异常的优缺点 异常 1.C语言传统的处理错误的方式 终止程序&#xff0c;如assert&#xff0c;缺陷&#xff1a;用户难以…

MyBatisPlus的基本使用之QueryWrapper

QueryWrapper是MyBatis-Plus中的一个查询封装类&#xff0c;用于构建带有条件的查询语句。 1. QueryWrapper 使用普通的方式来设置查询条件&#xff0c;而不是使用Lambda表达式。 一系列方法设置查询条件。手动指定数据库表的列名作为方法的参数 select 设置查询的字段 eq、…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextClock组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextClock组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同…

Linux 内核版本和发布历史

版本命名 在 2.6.x 版本以前&#xff0c;托瓦兹将核心的发展趋势分为两股&#xff0c;并根据这两股核心的发展分别给予不 同的核心编号。次版本为奇数表示发展中版本(development) 如2.5.xx&#xff0c;这种核心版本主要用在测试与测试新功能。次版本为偶数表示稳定版本 (stab…

Pytorch从零开始实战18

Pytorch从零开始实战——人脸图像生成 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——人脸图像生成环境准备模型定义开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch2.0.1cu118&#…

【2024年美赛即将开赛】最后一天如何提高获奖率

美赛思路预定 01 美赛赛中时间分配美赛时间安排比赛前2~3天第一天&#xff08;2号&#xff09;第二天&#xff08;3号&#xff09;第三天&#xff08;4号&#xff09;第四天&#xff08;5号&#xff09;第五天&#xff08;6号&#xff09;8&#xff1a;00~10&#xff1a;00 02 …

Hadoop-生产调优(更新中)

第1章 HDFS-核心参数 1.1 NameNode内存生产配置 1&#xff09;NameNode 内存计算 每个文件块大概占用 150 byte&#xff0c;一台服务器 128G 内存为例&#xff0c;能存储多少文件块呢&#xff1f; 128 * 1024 * 1024 * 1024 / 150byte ≈ 9.1 亿G MB KB Byte 2&#xff09…