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

东莞厚街网站建设贵州seo推广

东莞厚街网站建设,贵州seo推广,葫芦岛长城建设公司网站,世界500强企业分布结构体 rust不是面向对象语言,没有类(class),主要采用结构体(struct)来处理结构化数据,这点与go语言相似。 基本使用 struct Person {name: String,age: u32,height: f64, }fn main() {let p…

结构体

rust不是面向对象语言,没有类(class),主要采用结构体(struct)来处理结构化数据,这点与go语言相似。

基本使用

struct Person {name: String,age: u32,height: f64,
}fn main() {let person = Person {name: String::from("张三"),age: 34,height: 175.0,};println!("姓名: {}, 年龄: {}, 身高: {}", person.name, person.age, person.height);
}

2. 结构体的方法
通过 impl 块为结构体定义方法:

struct Person {name: String,age: u32,height: f64,
}impl Person {// 关联函数(类似构造函数)fn new(name: &str, age: u32, height: f64) -> Person {Person {name: String::from(name),age,height,}}// 方法:打印信息fn greet(&self) {println!("我是: {}, 年龄: {}, 身高: {}", self.name, self.age, self.height);}// 方法:修改年龄fn celebrate_birthday(&mut self, age: u32) {self.age = age;println!("Happy Birthday! Now I am {} years old.", self.age);}
}fn main() {let mut person = Person::new("小红", 25, 160.0);person.greet(); // 调用方法person.celebrate_birthday(24); // 修改年龄person.greet();
}

3.结构体与所有权
Rust 的所有权规则同样适用于结构体。如果结构体包含拥有所有权的字段(如 String 或 Vec),当结构体被移动时,这些字段的所有权也会被转移。

struct Person {name: String,
}fn main() {let person = Person {name: String::from("小李"),};let another_person = person; // 所有权转移println!("{}", person.name); // 错误:`person` 已经被移动
}

4.rust结构体的可见性
结构体本身默认私有,用 pub 使其公有,这点与go语言不太一样,go是才用首字母是否大写来确定是否公有

pub struct PublicStruct {pub public_field: i32,private_field: i32,  // 默认私有
}

5.应用练习

206. 反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

(1)先定义数据库结构,直接从力扣上获取

 //Definition for singly-linked list.#[derive(PartialEq, Eq, Clone, Debug)]pub struct ListNode {pub val: i32,pub next: Option<Box<ListNode>>}impl ListNode {#[inline]fn new(val: i32) -> Self {ListNode {next: None,val}}}

 注 Box<T> 是 Rust 中最简单的智能指针之一,它允许在堆上分配一块内存,并将值存储在这个内存中,目前智能指针还没学,暂时先了解一下,不用深究

(2)节点为空判断,由于 Rust 不支持 null ,这就很难受了,不光链表,后面的栈、队列、二叉树等都免不了要判断为空的情况,这怎么办呢,那就是用上一篇说的,用Option枚举类型,用Option可以有效处理节点为空的情况,可以用if也可以用match模式匹配,考虑目前还不是很熟,match不易理解,先用if,后面再用match

fn main() { // 创建单个节点let node1 = ListNode::new(1); // 值为 1 的节点println!("单个节点: {:?}", node1);let head = Some(Box::new(node1)); // 确保 head 是 Option<Box<ListNode>>if let Some(node) = head {println!("节点不为空, 值是: {}", node.val);} else {println!("节点为空");}//创建空节点let head :Option<Box<ListNode>> = None;if let Some(node) = head {println!("节点不为空, 值是: {}", node.val);} else {println!("节点为空");}
}

(3)解题原始版本

pub fn reverse_list(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {let mut cur = head;let mut pre: Option<Box<ListNode>> = None;loop {if let Some(mut node) = cur {// 使用 take 取出 node.next 的值,并将 node.next 设置为 Nonecur = node.next.take(); node.next = pre;        // 将前一个节点赋值给当前节点的 nextpre = Some(node);       // 更新 pre 为当前节点} else {break;}} return pre;}

简化版

pub fn reverse_list(head: Option<Box<ListNode>>) -> Option<Box<ListNode>> {let mut cur = head;let mut pre: Option<Box<ListNode>> = None;while let Some(mut node) = cur.take() {cur = node.next;node.next = pre;  pre = Some(node);      }return pre;
}

 运行结果

总结结构体是rust重要是数据结构,需要重点掌握,未来无论刷题还是做项目都会大量用到。再处理链表这类复杂的数据结构,特别是为空判断,可以使用Option枚举类型,来处理这种情况。

解题思路,首先先屏蔽一些不易理解的内容,如智能指针Box<T>、match模式匹配不易理解,先用if,递归等学到函数递归再用,然后逐个解决,先解决为空判断,然后再解题就很轻松了。

take函数

Option::take 的定义

pub fn take(&mut self) -> Option<T>

功能:从一个可变引用中取出当前的值,并将该 Option<T> 设置为 None。
返回值:返回当前的 Option<T> 值(可能是 Some(T) 或 None)。
通过这种方式,take 方法允许你在不破坏原始 Option<T> 的情况下,安全地获取其内部值。

cur.take();  // 使用 take 取出 cur的值,并将 cur设置为 None,这样所有权不用发生转移,特别适合处理链表这种复杂的数据结构,安全高效

http://www.dtcms.com/wzjs/342384.html

相关文章:

  • 动态网站开发技术教材app拉新任务平台
  • 浙江省永康市建设局网站进不去百度seo关键词
  • 做网站开发需要什么证书seo自学教程推荐
  • 福州php做网站seo页面优化公司
  • 中国职业球队白帽优化关键词排名seo
  • 对话弹窗在网站上浮动谷歌推广代理
  • 搜索推广和信息流推广seo快速排名源码
  • 东莞网站建设都用哪个好全网推广费用
  • 东莞中赢网站建设公司怎么样长沙网络推广服务
  • 网站正在备案广州网站设计建设
  • python 搭建wordpressaso关键词优化工具
  • 网站建设是专业市场seo是什么
  • 长沙营销型网站建设制作seo案例分析100例
  • 福建省人民政府官网首页seo实战培训王乃用
  • 日本人做的中国摇滚网站seo 工具推荐
  • 做网站需要备注号码跨境电商网站开发
  • 专做外贸衣服鞋网站有哪些交易链接大全
  • 广告传媒公司的网站应该怎么做网站关键词排名查询
  • asp.net网站安全石家庄新闻网头条新闻
  • 网站建设中 什么意思搜索引擎优化概述
  • 西安城乡建设网站友情链接代码美化
  • 学校网站建设发展概况分析企业网站类型有哪些
  • 国外代码开源网站有创意的网络营销案例
  • 电脑制作网站教程云南最新消息
  • 校园网站建设的必要性论文临沂网站建设方案服务
  • 顺德做外贸网站武汉最新疫情
  • 自己怎么做微信小程序网站关键词优化难度分析
  • 如何给网站添加关键词seo网站推广价格
  • wordpress侧导航菜单百度移动排名优化软件
  • 网站建设实训设计思想淘宝指数查询工具