【Rust光年纪】极致性能与灵活选择:Rust语言数学优化库详解

Rust语言中的数学优化:六大利器汇总

前言

在当今信息时代,数据处理和数学优化成为了各行各业中不可或缺的重要环节。为了满足对高效、快速计算的需求,Rust语言逐渐成为了许多开发者的首选,因其性能优越、并发安全等特点。本文将介绍几个用于Rust语言的数学优化库,它们分别为convex、nalgebra、scipy-rust、linfa、sprs和differential-dataflow。

欢迎订阅专栏:Rust光年纪

文章目录

  • Rust语言中的数学优化:六大利器汇总
    • 前言
    • 1. convex:一个用于Rust语言的凸优化库
      • 1.1 简介
        • 1.1.1 核心功能
        • 1.1.2 使用场景
      • 1.2 安装与配置
        • 1.2.1 安装指南
        • 1.2.2 基本配置
      • 1.3 API 概览
        • 1.3.1 凸优化设置
        • 1.3.2 约束条件
    • 2. nalgebra:一个用于Rust语言的线性代数库
      • 2.1 简介
        • 2.1.1 核心功能
        • 2.1.2 使用场景
      • 2.2 安装与配置
        • 2.2.1 安装指南
        • 2.2.2 基本配置
      • 2.3 API 概览
        • 2.3.1 向量和矩阵操作
        • 2.3.2 线性方程求解
    • 3. scipy-rust:一个用于Rust语言的科学计算库,提供了许多数学优化工具
      • 3.1 简介
        • 3.1.1 核心功能
        • 3.1.2 使用场景
      • 3.2 安装与配置
        • 3.2.1 安装指南
        • 3.2.2 基本配置
      • 3.3 API 概览
        • 3.3.1 积分和微分
        • 3.3.2 优化算法
    • 4. linfa:一个用于Rust语言的机器学习库,包含了一些优化算法
      • 4.1 简介
        • 4.1.1 核心功能
        • 4.1.2 使用场景
      • 4.2 安装与配置
        • 4.2.1 安装指南
        • 4.2.2 基本配置
      • 4.3 API 概览
        • 4.3.1 机器学习模型训练
        • 4.3.2 参数优化
    • 5. sprs:一个用于Rust语言的稀疏矩阵库,适用于大规模数学优化问题
      • 5.1 简介
        • 5.1.1 核心功能
        • 5.1.2 使用场景
      • 5.2 安装与配置
        • 5.2.1 安装指南
        • 5.2.2 基本配置
      • 5.3 API 概览
        • 5.3.1 稀疏矩阵操作
        • 5.3.2 高效存储和计算
    • 6. differential-dataflow:一个用于Rust语言的增量数据流处理库,可应用于数学优化领域的实时计算
      • 6.1 简介
        • 6.1.1 核心功能
        • 6.1.2 使用场景
      • 6.2 安装与配置
        • 6.2.1 安装指南
        • 6.2.2 基本配置
      • 6.3 API 概览
        • 6.3.1 数据流建模
        • 6.3.2 实时计算和优化
    • 总结

1. convex:一个用于Rust语言的凸优化库

1.1 简介

convex 是一个针对 Rust 语言的凸优化库,旨在提供丰富的凸优化功能和灵活的使用场景。

1.1.1 核心功能
  • 提供了多种凸优化算法,如梯度下降、牛顿法等。
  • 支持不同类型的目标函数和约束条件。
  • 提供了灵活的配置选项,以满足各种优化需求。
1.1.2 使用场景

convex 库适用于各种需要进行凸优化的场景,例如机器学习模型训练、工程优化、金融建模等领域。

1.2 安装与配置

要开始使用 convex 库,首先需要进行安装和基本配置。

1.2.1 安装指南

你可以通过 Cargo,在 Cargo.toml 文件中添加以下依赖来安装 convex:

[dependencies]
convex = "0.1.0"

更多关于安装的信息,请参考 convex官方文档。

1.2.2 基本配置

在你的 Rust 项目中,你可以像这样引入 convex 库:

use convex::prelude::*;

这将使你能够使用 convex 中提供的所有功能。

1.3 API 概览

一旦安装并配置好 convex,你可以开始使用其提供的 API 进行凸优化。

1.3.1 凸优化设置

以下是一个简单的凸优化设置示例:

fn main() {let mut problem = Problem::new();let x = problem.add_variable("x");let y = problem.add_variable("y");problem.minimize(3 * x + 4 * y);problem.add_constraint(x + 2 * y >= 4);problem.add_constraint(3 * x - y <= 3);let result = problem.solve().unwrap();println!("{:?}", result);
}
1.3.2 约束条件

在 convex 中,你可以轻松地添加各种约束条件,如等式约束、不等式约束等。以下是一个添加约束条件的示例:

fn main() {let mut problem = Problem::new();let x = problem.add_variable("x");let y = problem.add_variable("y");problem.minimize(3 * x + 4 * y);// 添加不等式约束条件problem.add_constraint(x + 2 * y >= 4);problem.add_constraint(3 * x - y <= 3);let result = problem.solve().unwrap();println!("{:?}", result);
}

更多关于 convex 的 API 和具体用法,请查阅 convex官方文档。

2. nalgebra:一个用于Rust语言的线性代数库

2.1 简介

nalgebra是一个专为Rust语言设计的线性代数库,旨在提供广泛的线性代数功能,包括向量、矩阵操作以及线性方程求解等。

2.1.1 核心功能
  • 向量和矩阵的创建和操作
  • 线性方程的求解
  • 仿射变换和投影
  • 广义特征值和特征向量计算
2.1.2 使用场景

nalgebra适用于需要进行复杂数学运算的Rust项目,例如游戏开发、物理模拟、机器人控制等领域。

2.2 安装与配置

2.2.1 安装指南

首先,在你的Cargo.toml文件中添加以下依赖:

[dependencies]
nalgebra = "0.29"

然后在代码中导入nalgebra模块以使用其功能:

use nalgebra::{Vector3, Matrix4};
2.2.2 基本配置

在使用nalgebra时,通常无需进行额外的基本配置。

2.3 API 概览

2.3.1 向量和矩阵操作
use nalgebra::{Vector3, Matrix4};fn main() {// 创建一个三维向量并进行加法运算let v1 = Vector3::new(1.0, 2.0, 3.0);let v2 = Vector3::new(4.0, 5.0, 6.0);let sum = v1 + v2;println!("Sum: {:?}", sum);// 创建一个 4x4 矩阵并进行乘法运算let m1 = Matrix4::new(1.0, 2.0, 3.0, 4.0,5.0, 6.0, 7.0, 8.0,9.0, 10.0, 11.0, 12.0,13.0, 14.0, 15.0, 16.0);let m2 = Matrix4::new(16.0, 15.0, 14.0, 13.0,12.0, 11.0, 10.0, 9.0,8.0, 7.0, 6.0, 5.0,4.0, 3.0, 2.0, 1.0);let product = m1 * m2;println!("Product: {:?}", product);
}

官网链接:nalgebra

2.3.2 线性方程求解
use nalgebra::{Matrix2, Vector2};fn main() {// 创建一个 2x2 线性方程组的系数矩阵let a = Matrix2::new(2.0, 1.0,1.0, -1.0);// 创建一个 2 维常数向量let b = Vector2::new(3.0, 1.0);// 解线性方程组match a.try_inverse() {Some(a_inv) => {let x = a_inv * &b; // 解出 x 向量println!("Solution: {:?}", x);}None => {println!("The matrix is not invertible.");}}
}

官网链接:nalgebra

3. scipy-rust:一个用于Rust语言的科学计算库,提供了许多数学优化工具

3.1 简介

3.1.1 核心功能

scipy-rust 是一个用于 Rust 语言的科学计算库,旨在提供数学优化工具,包括积分、微分和优化算法等。

3.1.2 使用场景

scipy-rust 可以被广泛应用于数学建模、机器学习、数据分析等领域,在这些领域中,通过优化算法来解决各种数学问题。

3.2 安装与配置

3.2.1 安装指南

你可以通过 Cargo.toml 文件将 scipy-rust 集成到你的 Rust 项目中:

[dependencies]
scipy-rust = "0.1.0"

更多关于安装 scipy-rust 的详细步骤,请参考官方文档

3.2.2 基本配置

在使用 scipy-rust 之前,你需要确保已经正确安装了 Rust 编程语言和 Cargo 包管理工具。另外,推荐使用最新版本的 Rust 和 Cargo 以获取最佳的性能和稳定性。

3.3 API 概览

3.3.1 积分和微分

scipy-rust 提供了一系列用于数值积分和微分的函数,以解决数学模型中的积分和微分问题。下面是一个简单的例子,演示了如何在 Rust 中使用 scipy-rust 来计算函数的数值积分:

use scipy_rust::integrate::trapz;fn main() {let x = vec![0.0, 1.0, 2.0, 3.0];let y = vec![0.0, 1.0, 4.0, 9.0];let result = trapz(&x, &y, None);println!("The integral of the function is: {}", result);
}

更多有关积分和微分API的信息,请查阅官方文档

3.3.2 优化算法

scipy-rust 还提供了各种数学优化算法,帮助用户在科学计算中寻找最优解。以下是一个使用 scipy-rust 进行优化的简单示例:

use scipy_rust::optimize::{minimize_scalar, OptimizeResult};fn main() {let f = |x: f64| (x - 2.0).powi(2);let result = minimize_scalar(f, None);match result {OptimizeResult::Success(x) => {println!("Optimization result: x={}, fun={}", x.x, x.fun);},_ => println!("Optimization failed"),}
}

更多关于优化算法的信息,请查阅官方文档

4. linfa:一个用于Rust语言的机器学习库,包含了一些优化算法

4.1 简介

4.1.1 核心功能

linfa是一个用于Rust语言的机器学习库,提供了一些优化算法,可以用于机器学习模型训练和参数优化。该库致力于为Rust社区提供现代、可靠的机器学习工具。

4.1.2 使用场景

linfa 可以应用于各种机器学习场景,包括数据预处理、监督学习和无监督学习等领域。

4.2 安装与配置

4.2.1 安装指南

使用 Cargo(Rust 的包管理工具)可以方便地安装 linfa:

[dependencies]
linfa = "0.3"

更多安装信息请参考官方文档:linfa 安装指南

4.2.2 基本配置

linfa 的基本配置不需要过多的设置,通常只需要通过 Cargo.toml 文件中添加依赖即可。

4.3 API 概览

4.3.1 机器学习模型训练

linfa 提供了机器学习模型的训练接口,例如以下示例演示了如何使用线性回归模型:

use linfa::prelude::*;
use linfa_linear::LinearRegression;fn main() {// 准备数据let x = matrix![1., 2., 3.; 2., 3., 4.];let y = vector![4., 7.];// 创建并训练线性回归模型let model = LinearRegression::fit(&x, &y).unwrap();// 获取模型参数println!("Model coefficients: {:?}", model.coefficients());
}

更多机器学习模型训练的信息请参考官方文档:linfa 机器学习模型训练

4.3.2 参数优化

linfa 还提供了参数优化的功能,例如以下示例演示了如何使用网格搜索来优化模型的超参数:

use linfa::traits::{Fit, Predict};
use linfa::param_guard::ParamGuard;
use linfa::optimization::grid::bruteforce;
use linfa_linear::LinearRegression;fn main() {// 准备数据let x = matrix![1., 2., 3.; 2., 3., 4.];let y = vector![4., 7.];// 创建线性回归模型let model = LinearRegression::default();// 设置超参数搜索范围let param_search_space = vec![(-1.0, 1.0), (-1.0, 1.0)];// 使用网格搜索进行参数优化let (best_params, best_score) = bruteforce(&model, &x, &y, &param_search_space).unwrap();// 输出最佳参数及其对应的得分println!("Best parameters: {:?}, Best score: {}", best_params, best_score);
}

更多参数优化的信息请参考官方文档:linfa 参数优化

以上是关于 linfa 机器学习库的简要介绍和示例代码,希望能帮助你快速入门。

5. sprs:一个用于Rust语言的稀疏矩阵库,适用于大规模数学优化问题

5.1 简介

sprs 是一个专为 Rust 语言设计的稀疏矩阵库,旨在解决大规模数学优化问题。它以高效的方式处理稀疏矩阵,并提供了丰富的操作和计算功能。

5.1.1 核心功能
  • 提供对稀疏矩阵的创建、修改和操作功能
  • 支持稀疏矩阵的高效存储和计算
  • 提供了常见数学优化问题的解决方案
5.1.2 使用场景

sprs 非常适合解决需要处理大规模稀疏矩阵的数学优化问题,例如图像处理、机器学习和科学计算领域。

5.2 安装与配置

5.2.1 安装指南

你可以通过 Cargo(Rust 的包管理工具)来安装 sprs。在项目的 Cargo.toml 文件中添加以下依赖:

[dependencies]
sprs = "0.7.2"

然后在代码中使用 extern crate sprs; 来引入该库。

更多详细的安装指南请参考 sprs 官方文档

5.2.2 基本配置

在代码中引入 sprs 库后,你就可以直接开始使用它的功能了。

5.3 API 概览

5.3.1 稀疏矩阵操作

下面是一个简单示例,展示了如何创建一个稀疏矩阵并对其进行操作:

use sprs::CsMat;fn main() {// 创建一个 3x3 的稀疏矩阵let indptr = vec![0, 2, 3, 4];let indices = vec![0, 2, 1, 2];let data = vec![1.0, 2.0, 3.0, 4.0];let mat = CsMat::new((3, 3), indptr, indices, data);// 获取 (1, 1) 元素的值let val = mat[(1, 1)];println!("Value at (1, 1): {}", val);
}
5.3.2 高效存储和计算

sprs 提供了对稀疏矩阵进行高效存储和计算的功能。例如,你可以使用 CSR(Compressed Sparse Row)格式来存储稀疏矩阵,并且进行矩阵乘法等运算。

更多关于 sprs 的 API 和详细功能,请参考 sprs 官方文档

通过 sprs,你可以更加方便地处理大规模数学优化问题,提高程序的效率和性能。

以上便是关于 sprs 的简要介绍和基本使用方法,希望对你有所帮助!

6. differential-dataflow:一个用于Rust语言的增量数据流处理库,可应用于数学优化领域的实时计算

6.1 简介

differential-dataflow是一个用于Rust语言的增量数据流处理库,它能够有效处理动态数据集,并支持实时计算。在数学优化领域,它可以用于处理实时变化的数据,并进行即时优化计算。

6.1.1 核心功能

differential-dataflow的核心功能包括对增量数据流的高效处理、支持实时数据集的动态更新和提供丰富的操作符来进行数据流分析和优化计算。

6.1.2 使用场景
  1. 实时数据流处理与分析
  2. 动态数据集的优化计算
  3. 大规模数据集的增量处理

6.2 安装与配置

6.2.1 安装指南

使用Cargo包管理器可以轻松安装differential-dataflow。首先需要确保已经安装了Rust编程语言的工具链,然后通过以下命令安装differential-dataflow:

cargo install differential-dataflow
6.2.2 基本配置

在使用differential-dataflow之前,需要在Rust项目中引入该库,可以在项目的Cargo.toml文件中添加以下依赖项:

[dependencies]
differential-dataflow = "0.8"

6.3 API 概览

6.3.1 数据流建模

使用differential-dataflow建模数据流非常简单。下面是一个示例代码,演示了如何创建一个简单的数据流并对其进行基本操作:

use differential_dataflow::input::Input;fn main() {let data = vec![1, 2, 3, 4, 5];let (handle, probe) = timely::example(|scope| {let (handle, stream) = scope.new_collection();stream.update(&data);let probe = stream.distinct().probe();(handle, probe)});
}

更多关于数据流建模的内容,请参考differential-dataflow官方文档。

6.3.2 实时计算和优化

differential-dataflow提供了丰富的操作符来进行实时计算和优化。下面是一个简单的例子,演示了如何使用differential-dataflow对数据流进行实时计算和优化操作:

use differential_dataflow::operators::*;fn main() {timely::execute_from_args(std::env::args(), move |worker| {let mut input = worker.dataflow::<usize, _>(|scope| {let (input, stream) = scope.new_input();stream.inspect(|x| println!("data: {:?}", x));input});for i in 1..=10 {input.send(i);input.advance_to(i);worker.step_while(|| !input.frontier().at_capacity());}}).unwrap();
}

更多关于实时计算和优化的内容,请参考differential-dataflow官方文档。

总结

本文分别介绍了用于Rust语言的凸优化库convex、线性代数库nalgebra、科学计算库scipy-rust、机器学习库linfa、稀疏矩阵库sprs和增量数据流处理库differential-dataflow。每个库都有其独特的功能和使用场景,可以满足不同领域的数学优化需求。通过本文的阅读,读者将能够全面了解这些库的特点和用法,为实际项目的数学优化计算提供有力支持。

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

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

相关文章

【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针

目录 常量指针和指向常量的指针有什么区别&#xff1f;1. 指向常量的指针&#xff08;Pointer to Constant&#xff09;声明方式&#xff1a;示例&#xff1a;解释&#xff1a; 2. 常量指针&#xff08;Constant Pointer&#xff09;声明方式&#xff1a;示例&#xff1a;解释&…

zookeeper子结点方式实现分布式锁(阻塞,非阻塞)

一&#xff0c;阻塞式和非阻塞式 “阻塞”和“非阻塞”只是一个人为的概念&#xff0c;“阻塞”说的是一个线程去尝试获取锁&#xff0c;如果失败&#xff0c;就阻塞在这里&#xff0c;监听到持有锁的线程释放&#xff0c;再次去尝试获取。 而“非阻塞”是我尝试一次失败了&am…

泛域名绑定到wordpress网站二级目录

要将WordPress的泛域名绑定到二级目录&#xff0c;你需要在你的服务器上修改Apache或Nginx配置文件。以下是两种最常见的服务器配置的示例&#xff1a; Apache服务器 编辑你的虚拟主机配置文件&#xff0c;通常位于/etc/apache2/sites-available/目录下。 <VirtualHost *…

2024 暑假友谊赛-热身1

[ABC102D] Equal Cut - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:找在区间[2,n-1]中找到i,j,k三个点,把序列分割成4个区间:[1,i],[i1,j],[j1,k],[k1,n] 暴力的做法是枚举i,j,k加上前缀和是o(n^3)的 key:"考虑枚举处于中间的j&#xff0c;然后用i平衡左两个区间,…

【踩坑系列-JS】iframe中的url参数获取

Author&#xff1a;赵志乾 Date&#xff1a;2024-07-24 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 问题描述 系统A的页面中以iframe的方式嵌入了系统B的页面&#xff0c;并需要将A页面url中的参数传递给B页面。 最初的实现方式是&am…

【es】elasticsearch 自定义排序-按关键字位置排序

一 背景 要求es查询的结果按关键字位置排序&#xff0c;位置越靠前优先级越高。 es版本7.14.0&#xff0c;项目是thrift&#xff0c;也可以平替springboot&#xff0c;使用easyes连接es。 二 easyes使用 配easyes按官方文档就差不多了 排序 | Easy-Es 主要的一个问题是easy…

Lua实现面向对象以及类的继承

0.简单前言 1、面向对象主要四个特征&#xff1a;封装&#xff0c;继承&#xff0c;多态&#xff0c;抽象 2、Lua是种简单精致小巧的语言&#xff0c;其本质是个表&#xff08;table&#xff09;&#xff0c;变量和方法皆可看作为该表的元素。 P.S. 该博客和代码为个人编写习…

Golang零基础入门课_20240726 课程笔记

视频课程 最近发现越来越多的公司在用Golang了&#xff0c;所以精心整理了一套视频教程给大家&#xff0c;这个只是其中的第一部&#xff0c;后续还会有很多。 视频已经录制完成&#xff0c;完整目录截图如下&#xff1a; 课程目录 01 第一个Go程序.mp402 定义变量.mp403 …

【工具类】Java DES加密解密

package com.util;import java.security.Key; import java.security.SecureRandom;import javax.crypto.Cipher; import javax.crypto.KeyGenerator;import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /*** DES算法*/ SuppressWarnings("restriction")…

Leetcode—263. 丑数【简单】

2024每日刷题&#xff08;147&#xff09; Leetcode—263. 丑数 实现代码 class Solution { public:bool isUgly(int n) {if(n < 0) {return false;}for(const int prime: {2, 3, 5}) {while(n % prime 0) {n / prime;}}return n 1;} };运行结果 之后我会持续更新&#…

ORACLE RAC 环境真的不能开启主机防火墙吗?

一直以来&#xff0c;安装ORACLE RAC&#xff0c;都是直接关闭防火墙&#xff0c;要问为什么&#xff0c;说是官方的推荐&#xff0c;具体可以见 RAC instabilities due to firewall (netfilter/iptables) enabled on the cluster interconnect (Doc ID 554781.1)&#xff0c;启…

iframe 内嵌跨域页面如何做到高度自适应

场景描述&#xff1a; parent.html 页面中通过iframe内嵌children.html页面&#xff0c;且children.html 页面高度是动态变化的&#xff0c;此时需要parent.html中的iframe的高度自适应children.hml 的高度&#xff0c;避免出现滚动条., 解决方法分为以下两步 1&#xff0c;pa…

win11 备份mysql数据 卸载mysql 5 安装mysql 8详细教程(mysql的数据备份与卸载与安装)

如果是第一次安装mysql便可以直接看第三步 第一步&#xff1a;数据备份 我选择的是备份全部数据 以管理员身份运行cmd输入mysqldump -u root -p --all-databases --routines --triggers --single-transaction > C:\ProgramTools\MySql\backup_5.6.sql 其中&#xff1a;-u…

追问试面试系列:开篇

我们不管做任何事情&#xff0c;都是需要个理由&#xff0c;而不是盲目去做。 为什么写这个专栏&#xff1f; 就像我们被面试八股文时&#xff0c;市面上有很多面试八股文&#xff0c;随便一个八股文都是500&#xff0c;甚至1000面试题。诸多面试题&#xff0c;难道我们需要一…

前端和Postman调用同一个接口,拿到的数据不一样

1、表现 联调一个List接口&#xff0c;Postman自测得到的ID和前端调用得到的ID&#xff0c;结果不一样。前者结果&#xff1a; 后者结果&#xff1a; 同一份代码、同一个数据库&#xff0c;出现这种错误&#xff0c;大概率是类型转换时出问题了&#xff0c;但检查代码发现&…

对称性破缺与涌现——复杂科学与艺术之间的共鸣

中科院物理所 2022年08月14日 11:08 北京 以下文章来源于集智俱乐部 &#xff0c;作者十三维 导语 对复杂性的研究曾颠覆了科学原有的还原论范式&#xff0c;那么当复杂科学遇到艺术时会怎样&#xff1f;社会生物学家爱德华威尔逊&#xff08;E.O. Wilson&#xff09;曾说&am…

免费【2024】springboot 城市交通管理系统的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

c++中的快速排序核心代码

快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速…

com.github.yulichang.wrapper.MPJLambdaWrapper selectJoinOne用法

selectJoinOne方法是mybatis-plus-join项目中的一个方法&#xff0c;用于实现单表查询并关联查询其他表的数据。以下是一个使用selectJoinOne的示例&#xff1a; 假设我们有两个表&#xff1a;用户&#xff08;User&#xff09;和订单&#xff08;Order&#xff09;&#xff0…

C++箭头运算符->

在C中&#xff0c;箭头运算符&#xff08;Arrow Operator&#xff09; -> 是一个重要的运算符&#xff0c;主要用于通过指针访问对象的成员。它的作用是解引用指针并访问成员&#xff0c;简化了指针操作的语法。 1. 基本用法 当你有一个指向对象的指针时&#xff0c;可以使…