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

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 #&#xff08;kali生成payload存放位置&#xff09; shellcode bytearray(b"shellc…...

OpenCV实现物体尺寸的测量

一 &#xff0c;项目分析 物体尺寸测量的思路是找一个确定尺寸的物体作为参照物&#xff0c;根据已知的计算未知物体尺寸。 如下图所示&#xff0c;绿色的板子尺寸为220*300&#xff08;单位&#xff1a;毫米&#xff09;&#xff0c;通过程序计算白色纸片的长度。 主要是通过…...

投资研报的优质网站

投资研报&#xff1a;https://www.zhihu.com/question/357713923/answer/2304672553...

每日刷题|贪心算法初识

食用指南&#xff1a;本文为作者刷题中认为有必要记录的题目 推荐专栏&#xff1a;每日刷题 ♈️今日夜电波&#xff1a;悬溺—葛东琪 0:34 ━━━━━━️&#x1f49f;──────── 3:17 &#x1f…...

[python]如何操作Outlook实现邮件自动化

【背景】 邮件自动化存在很多需求场景,有的场景希望会出现Outlook窗口在发送前进行一下人工检查等等的人为干预,有的则希望定时直接发送,有的需要加附件等等。本篇讨论用Python覆盖这些Outlook邮件自动化场景的方法。 【解决方法】 首先Outlook和SMTP的邮件自动化方法所使…...

2008-2021年上市公司实体企业金融化程度测算数据(原始数据+stata代码)

2008-2021年上市公司实体企业金融化程度测算&#xff08;原始数据stata代码&#xff09; 1、时间&#xff1a;2008-2021年 2、指标&#xff1a;股票代码、年份、交易性金融资产、衍生金融资产、发放贷款及垫款净额、可供出售金融资产净额、持有至到期投资净额、长期债权投资净…...

day02_numpy_demo

Numpy Numpy的优势ndarray属性基本操作 ndarray.func() numpy.func()ndarray的运算&#xff1a;逻辑运算、统计运算、数组间运算合并、分割、IO操作、数据处理,不过这个一般使用的是pandas Numpy的优势 Numpy numerical数值化 python 数值计算的python库&#xff0c;用于快…...

LeetCode 414. Third Maximum Number【数组】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中&#xff0c;综合&#xff08;synthesis&#xff09;是第一步。 一、综合的解释 在电子设计中&#xff0c;综合是指完成特定功能的门级网表的实现。除了特定功能&#xff0c;综合的过程可能还要满足某种其他要求&#xff0c;如功率、操作频率等。 有…...

Python实现一个简单的http服务,Url传参输出html页面

摘要 要实现一个可以接收参数的HTTP服务器&#xff0c;您可以使用Python标准库中的http.server模块。该模块提供了一个简单的HTTP服务器&#xff0c;可以用于开发和测试Web应用程序。 下面是一个示例代码&#xff0c;它实现了一个可以接收参数的HTTP服务器&#xff1a; 代码…...

力矩传感器模拟量与ADC采集输出数字量之间的关系

力矩传感器在测量力矩时&#xff0c;会输出一个模拟信号&#xff0c;通常是一个电压或电流信号。这个模拟信号的大小会根据所测量的力矩变化而变化。 ADC&#xff08;模数转换器&#xff09;是一种电子设备&#xff0c;可以将模拟信号转换为数字信号。ADC通过采样和量化模拟信…...

Confluence 解决PDF导出乱码问题

1.原因 PDF导出乱码是因为由于服务器缺少必要字体 2.解决办法 下载字体文件将字体文件重命名为simhei.ttf Confluence→管理→PDF导出语言支持&#xff0c;导入字体即可...

visual studio Qt 开发环境中手动添加 Q_OBJECT 导致编译时出错的问题

问题简述 创建项目的时候&#xff0c;已经添加了类文件&#xff0c;前期认为不需要信号槽&#xff0c;就没有添加宏Q_OBJECT,后面项目需要&#xff0c;又加入了宏Q_OBJECT&#xff0c;但是发现只是添加了一个宏Q_OBJECT&#xff0c;除此之外没有改动其它的代码&#xff0c;原本…...

Addressable使用指南

1、基础用法就不再赘述了&#xff0c;重要的属性配置&#xff1a; Disable Catalog Update on Startup&#xff1a;禁用时在初始化Addressables的时候自动更新远程的catalog&#xff08;启用后可以通过代码 Addressables.CheckForCatalogUpdates()更新&#xff09; Use…...

【力扣每日一题】2023.10.22 做菜顺序

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们一个数组表示每个菜的满意度&#xff0c;我们可以指定做哪些菜以及做的顺序&#xff0c;需要我们凑到一个系数的最大值&#xff0c…...

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结构组成的&#xff1a; 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浏览器插件。

本篇文章主要讲解&#xff0c;注册chrome开发者账号&#xff0c;及发布chrome浏览器插件的流程。包含插件的打包和上传。 日期&#xff1a;2023年10月22日 作者&#xff1a;任聪聪 一、前提准备&#xff1a;注册chrome开发者账号 说明&#xff1a;注册需要5美元&#xff0c;一…...

基于孔雀优化的BP神经网络(分类应用) - 附代码

基于孔雀优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于孔雀优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.孔雀优化BP神经网络3.1 BP神经网络参数设置3.2 孔雀算法应用 4.测试结果&#xff1a;5.M…...

王杨安企cms:批量3000个游戏下载指定链接导入方法!

我只做游戏下载站和其他管道项目&#xff0c;今天就简单讲解一下如何用安企cms下载站模板&#xff0c;批量导入几千个游戏指定下载链接&#xff01;其他老站长一般都是用api接口&#xff0c;但是接口对于入门的新手有难度&#xff0c;我也是入门级的新手&#xff0c;所以只说入…...

艾可瑞妥单抗EPKINLY真实世界经验:缓解率数据与中性粒细胞减少、发热等副作用的预防及处理

艾可瑞妥单抗&#xff08;EPKINLY&#xff09;作为一种创新型的双特异性T细胞衔接剂&#xff0c;在复发或难治性弥漫性大B细胞淋巴瘤&#xff08;DLBCL&#xff09;的治疗中展现出显著的疗效。缓解率数据多项真实世界研究数据支持了EPKINLY在治疗DLBCL中的显著疗效。例如&#…...

保姆级教程:手把手调试vsomeip 3.1.20.3的Event订阅流程(附GDB/日志追踪技巧)

深入调试vsomeip事件订阅&#xff1a;从原理到实战排查指南 事件订阅机制的核心原理 vsomeip作为车载中间件领域的核心通信框架&#xff0c;其事件订阅机制的设计直接影响着分布式系统的实时性和可靠性。理解这套机制的工作原理&#xff0c;是高效排查订阅问题的前提。 事件订阅…...

开发者的新武器:利用Claude Skill实现自动化代码审查与单元测试生成

你可能已经听说过Claude Skill——Anthropic在2025年10月推出的这个功能&#xff0c;一时间成了开发者圈子的热门话题。但说实话&#xff0c;刚开始我也觉得这不过是又一个“AI新特性”&#xff0c;听听就好&#xff0c;不用当真。直到有一天&#xff0c;我对着一个2000多行的R…...

QtDataVisualization实战:用三维图表打造一个酷炫的数据仪表盘(附完整源码)

QtDataVisualization三维数据仪表盘开发实战 三维数据可视化在现代数据分析中扮演着越来越重要的角色。QtDataVisualization模块为开发者提供了强大的工具&#xff0c;能够将复杂数据转化为直观的三维图表。本文将带你从零开始&#xff0c;构建一个功能完善、视觉效果出色的数据…...

Day03:Function Calling 核心

文章目录一、Function Calling 核心概念与定义1.1 技术本质与原理1.2 与传统 AI 推理的区别1.3 主要技术实现框架二、Function Calling 的核心价值与解决的问题2.1 解决知识截止问题2.2 解决实时数据获取需求2.3 解决外部动作执行问题2.4 安全性与可控性设计三、Function Calli…...

别再只看CPU主频了!聊聊L1、L2、L3缓存对游戏和编程的实际影响

别再只看CPU主频了&#xff01;聊聊L1、L2、L3缓存对游戏和编程的实际影响 当大多数玩家和开发者选购CPU时&#xff0c;第一眼总会聚焦在主频和核心数上——4.5GHz、8核16线程这些参数确实诱人。但真正影响日常体验的隐藏王牌&#xff0c;其实是那几MB的缓存。想象两个场景&…...

从Dex-Net 2.0到实际项目:如何用Python和PyTorch复现经典抓取质量评估网络(附数据集处理技巧)

从Dex-Net 2.0到实际项目&#xff1a;Python与PyTorch实战轻量化抓取质量评估模型 在机器人抓取研究领域&#xff0c;Dex-Net系列算法一直被视为性能标杆&#xff0c;但其庞大的数据需求和复杂实现往往让普通开发者望而却步。本文将带您用PyTorch搭建一个保留Dex-Net 2.0核心思…...

从PC到手机:聊聊高通骁龙平台上的UEFI启动,和传统LK有啥不一样?

从PC到手机&#xff1a;高通骁龙平台UEFI启动架构深度解析 在移动设备启动流程的演进历程中&#xff0c;UEFI&#xff08;统一可扩展固件接口&#xff09;的引入堪称一场静默革命。作为曾经主导PC领域的启动标准&#xff0c;UEFI如今正在重塑Android设备的启动架构。对于熟悉Li…...

23 亿 tokens 2283 美元:Claude Opus 一周写出完整 Chrome RCE 漏洞利用链

2026年4月15日&#xff0c;安全公司Hacktron的CTO Mohan Pedhapati&#xff08;网名s1r1us&#xff09;发布了一项足以震动整个网络安全行业的研究成果。他没有使用任何复杂的黑客工具&#xff0c;也没有花费数月时间进行逆向工程&#xff0c;仅仅通过与Anthropic已公开的Claud…...