rust学习~slice迭代器
背景
pub fn iter(&self) -> Iter<'_, T>
查看Iter
结构体
pub struct Iter<'a, T>
whereT: 'a,
{ /* private fields */ }
对迭代器求和 sum
fn sum<S>(self) -> S
whereSelf: Sized, // 该函数只能在具有已知大小的类型上调用S: Sum<Self::Item>, // 指定和的类型,要求和的类型必须实现了 Sum trait
该函数返回 self 中所有项的和
- Self 上的 Sized trait bound 表示该函数只能在具有已知大小的类型上调用,即只能在编译时确定大小的类型上调用该函数。
- S 类型参数用于指定和的类型,而且要求和的类型必须实现了 Sum trait(这个 trait 用于进行求和操作)。
求和中的Sum Trait
std::iter::Sum
pub trait Sum<A = Self>: Sized {// Required methodfn sum<I>(iter: I) -> Selfwhere I: Iterator<Item = A>;
}
查看int32的Sum实现
// i32 的实现中,实现了如下trait
impl Sum<i32> for i32fn sum<I>(iter: I) -> i32
whereI: Iterator<Item = i32>,
阅读代码
// 具体实现方式
// 一个宏,它接受一系列整数类型作为参数,并为每个整数类型生成函数
// 这些函数可以计算相应整数类型的一组数字的和与积
integer_sum_product! { i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize }// 宏的详细代码
// 为一系列整数类型实现 Sum 和 Product trait
macro_rules! integer_sum_product {// @impls 部分// 它是一个递归宏,用于为每个整数类型生成函数的实现// @impls 部分以两个参数 $zero 和 $one 开头,这两个参数分别是求和和求积操作的初始值// #[$attr:meta] 是一个标识求和和求积方法稳定性的元数据。这部分可以根据具体需求进行修改或省略// 为每个整数类型 $a 生成 Sum trait 的实现,初始值为 $zero// 为每个整数类型 $a 生成 Product trait 的实现,初始值为 $one(@impls $zero:expr, $one:expr, #[$attr:meta], $($a:ty)*) => ($(#[$attr]impl Sum for $a {fn sum<I: Iterator<Item=Self>>(iter: I) -> Self {// sum 方法的实现使用了 fold 方法来迭代累积计算和// 初始值为 $zero// 并在每次迭代中使用 #[rustc_inherit_overflow_checks] 注解来进行溢出检查// 迭代时,进行求和iter.fold($zero,#[rustc_inherit_overflow_checks]|a, b| a + b,)}}#[$attr]impl Product for $a {fn product<I: Iterator<Item=Self>>(iter: I) -> Self {iter.fold($one,#[rustc_inherit_overflow_checks]|a, b| a * b,)}}// 为引用类型生成的实现,允许对 &Self 进行求和#[$attr]impl<'a> Sum<&'a $a> for $a {fn sum<I: Iterator<Item=&'a Self>>(iter: I) -> Self {iter.fold(相关文章:
rust学习~slice迭代器
背景 pub fn iter(&self) -> Iter<_, T>查看Iter 结构体 pub struct Iter<a, T> whereT: a, {/* private fields */ }对迭代器求和 sum fn sum<S>(self) -> S whereSelf: Sized, // 该函数只能在具有已知大小的类型上调用S: Sum<Self::Item…...
python免杀初探
文章目录 loader基础知识loader参数介绍 evilhiding项目地址免杀方式修改加载器花指令混淆loader源码修改签名加壳远程条件触发修改ico的md5加密 loader基础知识 loader import ctypes #(kali生成payload存放位置) shellcode bytearray(b"shellc…...
OpenCV实现物体尺寸的测量
一 ,项目分析 物体尺寸测量的思路是找一个确定尺寸的物体作为参照物,根据已知的计算未知物体尺寸。 如下图所示,绿色的板子尺寸为220*300(单位:毫米),通过程序计算白色纸片的长度。 主要是通过…...
投资研报的优质网站
投资研报:https://www.zhihu.com/question/357713923/answer/2304672553...
每日刷题|贪心算法初识
食用指南:本文为作者刷题中认为有必要记录的题目 推荐专栏:每日刷题 ♈️今日夜电波:悬溺—葛东琪 0:34 ━━━━━━️💟──────── 3:17 …...
[python]如何操作Outlook实现邮件自动化
【背景】 邮件自动化存在很多需求场景,有的场景希望会出现Outlook窗口在发送前进行一下人工检查等等的人为干预,有的则希望定时直接发送,有的需要加附件等等。本篇讨论用Python覆盖这些Outlook邮件自动化场景的方法。 【解决方法】 首先Outlook和SMTP的邮件自动化方法所使…...
2008-2021年上市公司实体企业金融化程度测算数据(原始数据+stata代码)
2008-2021年上市公司实体企业金融化程度测算(原始数据stata代码) 1、时间:2008-2021年 2、指标:股票代码、年份、交易性金融资产、衍生金融资产、发放贷款及垫款净额、可供出售金融资产净额、持有至到期投资净额、长期债权投资净…...
day02_numpy_demo
Numpy Numpy的优势ndarray属性基本操作 ndarray.func() numpy.func()ndarray的运算:逻辑运算、统计运算、数组间运算合并、分割、IO操作、数据处理,不过这个一般使用的是pandas Numpy的优势 Numpy numerical数值化 python 数值计算的python库,用于快…...
LeetCode 414. Third Maximum Number【数组】简单
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
FPGA时序分析与约束(6)——综合的基础知识
在使用时序约束的设计过程中,综合(synthesis)是第一步。 一、综合的解释 在电子设计中,综合是指完成特定功能的门级网表的实现。除了特定功能,综合的过程可能还要满足某种其他要求,如功率、操作频率等。 有…...
Python实现一个简单的http服务,Url传参输出html页面
摘要 要实现一个可以接收参数的HTTP服务器,您可以使用Python标准库中的http.server模块。该模块提供了一个简单的HTTP服务器,可以用于开发和测试Web应用程序。 下面是一个示例代码,它实现了一个可以接收参数的HTTP服务器: 代码…...
力矩传感器模拟量与ADC采集输出数字量之间的关系
力矩传感器在测量力矩时,会输出一个模拟信号,通常是一个电压或电流信号。这个模拟信号的大小会根据所测量的力矩变化而变化。 ADC(模数转换器)是一种电子设备,可以将模拟信号转换为数字信号。ADC通过采样和量化模拟信…...
Confluence 解决PDF导出乱码问题
1.原因 PDF导出乱码是因为由于服务器缺少必要字体 2.解决办法 下载字体文件将字体文件重命名为simhei.ttf Confluence→管理→PDF导出语言支持,导入字体即可...
visual studio Qt 开发环境中手动添加 Q_OBJECT 导致编译时出错的问题
问题简述 创建项目的时候,已经添加了类文件,前期认为不需要信号槽,就没有添加宏Q_OBJECT,后面项目需要,又加入了宏Q_OBJECT,但是发现只是添加了一个宏Q_OBJECT,除此之外没有改动其它的代码,原本…...
Addressable使用指南
1、基础用法就不再赘述了,重要的属性配置: Disable Catalog Update on Startup:禁用时在初始化Addressables的时候自动更新远程的catalog(启用后可以通过代码 Addressables.CheckForCatalogUpdates()更新) Use…...
【力扣每日一题】2023.10.22 做菜顺序
目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 给我们一个数组表示每个菜的满意度,我们可以指定做哪些菜以及做的顺序,需要我们凑到一个系数的最大值,…...
MySQL 排名函数 RANK, DENSE_RANK, ROW_NUMBER
文章目录 1 排名函数有哪些?2 SQL 代码实现2.1 RANK2.2 DENSE_RANK2.3 ROW_NUMBER 1 排名函数有哪些? RANK(): 并列跳跃排名, 并列即相同的值, 相同的值保留重复名次, 遇到下一个不同值时, 跳跃到总共的排名DENSE_RANK(): 并列连续排序, 并列即相同的值, 相同的值保留重复名…...
avi视频协议的理解
可以把avi文件理解为由无数个struct结构组成的: 1. struct avifile { RIFF, AVI, struct. movi, struct hdrl} 2. struct hdrl { LIST, hdal, struct avih, struct stream0,struct stream1,struct stream2}; 3. struct stream {LIST …...
教你注册chrome开发者账号,并发布chrome浏览器插件。
本篇文章主要讲解,注册chrome开发者账号,及发布chrome浏览器插件的流程。包含插件的打包和上传。 日期:2023年10月22日 作者:任聪聪 一、前提准备:注册chrome开发者账号 说明:注册需要5美元,一…...
基于孔雀优化的BP神经网络(分类应用) - 附代码
基于孔雀优化的BP神经网络(分类应用) - 附代码 文章目录 基于孔雀优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.孔雀优化BP神经网络3.1 BP神经网络参数设置3.2 孔雀算法应用 4.测试结果:5.M…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
