Rust学习笔记_06——控制流(2)

embedded/2024/12/5 4:11:01/

Rust学习笔记_03——元组
Rust学习笔记_04——引用
Rust学习笔记_05——控制流(1)


Rust学习笔记_06——控制流(2)

控制流(2)

1. While循环

1.1 基础

Rust编程语言中,while循环是一种基本的控制流结构,它允许程序在给定条件为真时重复执行一段代码块。

rust">while condition {// 循环体:当condition为true时,重复执行的代码块
}
  • condition是一个表达式,它必须返回一个实现了std::convert::Into<bool>的类型的值(通常直接就是一个布尔值bool)。在每次循环迭代之前,都会计算这个条件。
  • 如果条件为true,则执行大括号{}中的代码块。
  • 执行完代码块后,再次计算条件。
  • 如果条件仍为true,则重复执行代码块。
  • 这个过程会一直持续,直到条件变为false,此时循环结束,程序继续执行while循环之后的代码。

示例

rust">fn main() {let mut number = 1;while number <= 5 {println!("{}", number);number += 1;}
}
1.2 break语句

break语句用于立即终止while循环,并跳出循环体,继续执行循环之后的代码。这对于在满足特定条件时提前退出循环非常有用。

rust">fn main() {let mut number = 0;while true { // 无限循环,但我们会用break来退出它number += 1;println!("{}", number);if number >= 5 {break; // 当number达到5时,退出循环}}println!("Loop exited at number: {}", number);
}
1.3 continue语句
rust">fn main() {let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];for number in &numbers { // 注意:这里为了演示,实际上用for循环更合适,但while循环也适用// 转换为while循环的示例(不推荐这样写,仅为了说明continue的用法)let mut index = 0;while index < numbers.len() {if *number % 2 == 0 { // 检查数字是否为偶数continue; // 如果是偶数,跳过当前迭代}println!("Odd number: {}", *number); // 只打印奇数index += 1; // 注意:在while循环中需要手动管理索引// 由于我们使用了for循环的变量number,这里实际上不需要index来遍历,// 但在将for转换为while时,为了模拟遍历,我们保留了index。// 在实际的while循环中,你应该根据需要来管理循环的状态。// 下面的代码是为了说明而保留的,实际上在这个例子中不需要。if index >= numbers.len() {break; // 退出循环(在这个例子中,由于我们使用了for的简化逻辑,这里不会被执行到)}}// 注意:上面的while循环逻辑是有问题的,因为它试图在每次for迭代中重新遍历整个vector。// 正确的做法是直接使用for循环或者用一个单独的while循环来遍历vector。// 下面的代码才是正确的while循环遍历vector的示例:let correct_numbers = vec![1, 2, 3, 4, 5]; // 另一个示例vectorlet mut correct_index = 0;while correct_index < correct_numbers.len() {let num = correct_numbers[correct_index];if num % 2 == 0 {correct_index += 1; // 直接跳到下一个迭代(虽然这里用continue也可以,但为了展示手动控制索引,我们没这么做)continue; // 在这个例子中,continue是多余的,因为下面就是增加索引的操作。// 但为了说明continue的用法,我们保留了它。}println!("Odd number in correct loop: {}", num);correct_index += 1;}}// 注意:上面的for循环部分是不正确的,仅用于说明continue的用法。// 正确的做法应该是直接使用一个while循环来遍历vector,如下所示:let numbers_again = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let mut index_again = 0;while index_again < numbers_again.len() {let num = numbers_again[index_again];if num % 2 != 0 { // 打印奇数println!("Odd number in while loop: {}", num);}index_again += 1;}
}

2. for循环

2.1 基础

Rust编程语言中,for循环是一种用于迭代集合(如数组、切片、向量、字符串、哈希映射的键或值、范围等)的便捷控制流结构。它提供了一种简洁且易于理解的方式来遍历集合中的每个元素,并对每个元素执行一段代码。

rust">for element in iterable {// 循环体:对iterable中的每个element执行的代码块
}
2.2 遍历数组
rust">fn main() {// 如果你想要修改向量中的元素(注意:这需要可变引用)let mut mutable_numbers = vec![1, 2, 3, 4, 5];for number in &mut mutable_numbers {*number *= 2; // 将每个元素乘以2}println!("{:?}", mutable_numbers); // 输出: [2, 4, 6, 8, 10]
}
2.3 便利字符串的字符
rust">fn main() {let greeting = "Hello, world!";for (index, char) in greeting.chars().enumerate() {println!("Character '{}' at index {}", char, index);}
}
2.4 注意事项
  • 在遍历不可变集合时,for循环中的element变量是不可变的。如果你需要修改集合中的元素,你需要获取一个可变引用(&mut),并在循环体内使用解引用(*)来修改元素的值。
  • Rust的for循环是通过迭代器实现的,这意味着你可以对任何实现了IntoIterator trait的类型使用for循环。
  • 在遍历哈希映射时,你可以分别遍历键、值或同时遍历键和值。这通常是通过调用keys()values()iter()方法来实现的。
  • 范围(Range)在Rust中也是可迭代的,你可以使用..来创建一个半开区间范围,或使用..=来创建一个闭区间范围。

http://www.ppmy.cn/embedded/143078.html

相关文章

docker.io连接超时的处理,用代理网站

docker pull的时候会超时&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 这时可以找一些代理网站&#xff0c;比如…

Vue.js 实现输入框清空功能的两种方式

Vue.js 是一个流行的前端框架&#xff0c;它提供了多种方法来实现数据的双向绑定和事件处理。在构建表单时&#xff0c;我们经常需要实现清空输入框的功能。本文将介绍两种在Vue中实现输入框清空功能的方法。 方法一&#xff1a;使用 v-model 实现双向绑定 在Vue中&#xff0…

跨 CA 签发多个证书的 Nginx mTLS 配置

研究过用同一个 CA 签发的服务端和客户端证书的 Nginx mTLS 配置&#xff0c;本文要试验一番服务端和客户端证书由不同 CA 机构签发的情形。这是常有事&#xff0c;比如与客户间采用 mTLS 加密方式&#xff0c;需要文件交付可能是 客户端证书由甲方生成&#xff0c;发送客户端…

【汽车】智能扭矩系统:提升汽车操控性的创新力量

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。】 在当今汽车技术的快速发展中&#xff0c;智能扭矩控制系统正成为提升汽车操控性的关键因素。像比亚迪的 iTAC、华为的 DATS 等系统&#xff0c;以其精确控制电机扭矩输出的卓越能力&#xff0c;…

如何用Excel做数据可视化自动化报表?

作为一个经常需要做数据报表的人&#xff0c;我最常用的工具是Excel&#xff0c;对于我来说用Excel处理繁琐冗杂的数据并不难&#xff0c;但是我发现身边很多人用Excel做的数据报表非常的耗时&#xff0c;而且最后的成品也是难以直视&#xff0c;逻辑和配色等都非常的“灾难”。…

【Spring Security框架解析】

文章目录 Spring-security介绍Spring-security认证授权流程认证流程Security流程认证过滤器实现获取UserDetail信息 配置Security Spring-security介绍 Spring Security是一个功能强大且高度可定制的Java安全框架&#xff0c;用于保护基于Spring的应用程序。它提供了全面的安全…

基于Matlab实现三维点坐标生成点云(源码+数据)

在MATLAB中生成三维点云是一项常见的任务&#xff0c;特别是在计算机视觉、几何建模和数据分析等领域。点云是由一组三维坐标&#xff08;x, y, z&#xff09;组成的集合&#xff0c;可以用来表示物体的表面或者空间中的采样数据。本篇文章将深入探讨如何使用MATLAB生成并处理点…

面向对象(二)——类和对象(上)

1 类的定义 做了关于对象的很多介绍&#xff0c;终于进入代码编写阶段。 本节中重点介绍类和对象的基本定义&#xff0c;属性和方法的基本使用方式。 【示例】类的定义方式 // 每一个源文件必须有且只有一个public class&#xff0c;并且类名和文件名保持一致&#xff01; …