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

做图书网站赚钱么济南seo网站优化公司

做图书网站赚钱么,济南seo网站优化公司,乌海学校网站建设,台州网站推广文章目录 一、迭代与循环1.循环2.迭代iteration3.区别 二、Intoiterator、Iterator和Iter之间的关系1.Intolterator2.Iterator Trait3. 源码中经常出现的iter 三、获取迭代器的三种方法iter(),iter_mut()和into_iter()1.iter()方法2.iter_mut()方法3.into_iter()方法---尽量写 …

文章目录

  • 一、迭代与循环
    • 1.循环
    • 2.迭代iteration
    • 3.区别
  • 二、Intoiterator、Iterator和Iter之间的关系
    • 1.Intolterator
    • 2.Iterator Trait
    • 3. 源码中经常出现的iter
  • 三、获取迭代器的三种方法iter(),iter_mut()和into_iter()
    • 1.iter()方法
    • 2.iter_mut()方法
    • 3.into_iter()方法---尽量写
  • 四、自定义类型实现iter(),iter_mut()和into_iter()
  • 参考

一、迭代与循环

1.循环

定义:循环是一种控制流结构,它会反复执行一组语句,直到满足某个条件。
控制条件:循环通常包含一个条件表达式,只有在条件为真时,循环体中的语句才会执行。
退出条件:循环执行直到条件不再满足,或者通过break、语句显式中断循环。
使用场景:适用于需要反复执行某个操作直到满足某个条件的情况。

2.迭代iteration

·定义:选代是对序列中的元素进行逐个访问的过程。
·控制条件:迭代通常使用迭代器(lterator)来实现,迭代器提供了对序列元素的访问和操作。
·退出条件:通常不需要显式的退出条件,迭代器会在处理完所有元素后自动停止。
·使用场景:适用于需要遍历数据结构中的元素的情况,例如数组、切片、集合等。

3.区别

·1.循环是一种控制流结构,它反复执行一组语句。
·2.送代是对序列中的元素进行逐个访问的过程,通常使用迭代器实现。
·3.循环可以是有限的(通过设置退出条件)或无限的(使用loop)关键字)。
·4.迭代器提供了一种更抽象的方式来处理序列,使得代码更具可读性和灵活性。
在Rust中,循环和迭代性能的差距可能会取决于具体的使用情况和编译器的优化。绝大多数情况下,Rust的迭代器是经过优化的,可以达到或接近手动编写循环的性能水平。

// &[i32] &Vec
// loop
fn sum_with_loop(arr: &[i32]) -> i32 {let mut sum = 0;for &item in arr {sum += item;}sum
}// iter
fn sum_with_iter(arr: &[i32]) -> i32 {arr.iter().sum()
}fn main() {const ARRAY_SIZE: usize = 10000;let array: Vec<i32> = (1..=ARRAY_SIZE as i32).collect();let sum1 = sum_with_loop(&array);println!("sum loop {}", sum1);let sum2 = sum_with_iter(&array);println!("sum loop {}", sum2);
}

编译及运行:

▶ cargo runCompiling ch5_iter_loop v0.1.0 (/home/wangji/code/rust/2024_rust/rust_project/ch4_iter_loop)Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.20sRunning `target/debug/ch5_iter_loop`
sum loop 50005000
sum loop 50005000

二、Intoiterator、Iterator和Iter之间的关系

1.Intolterator

Intolterator是一个RustTrait,它定义了一种将类型转换为迭代器的能力。
该Trait包含一个方法into_iter,该方法返回一个实现了IteratorTrait的迭代器。

通常,当你有一个类型,希望能够对其进行迭代时,你会实现IntolteratorTrait来提供将该类型转换为迭代器的方法。

2.Iterator Trait

Iterator是Rust标准库中的Trait,定义了一种访问序列元素的方式。
·它包含了一系列方法,如next、map、filter、sum、等,用于对序列进行不同类型的操作。

·通过实现Iterator丶Trait,你可以创建自定义的迭代器,以定义如何迭代你的类型中的元素。

pub trait Iterator{
type Item;
fn next(&mut self) -> Option<Self::Item>;
}

3. 源码中经常出现的iter

·Iter是IteratorTrait的一个具体实现,通常用于对集合中的元素进行迭代。
·在Rust中,你会经常看到Iter,特别是在对数组、切片等集合类型进行迭代时。
·通过lntolteratorTrait,你可以获取到一个特定类型的迭代器,比如Iter,然后可以使用IteratorTrait的方法进行操作。

fn main() {// veclet v = vec![1, 2, 3, 4, 5]; // intoIterator 特质 into_iter// 转换为迭代器let iter = v.into_iter(); // move 所有权转移 类似ppt中的Iter Iterator的特质对象let sum: i32 = iter.sum();println!("sum: {}", sum);// println!("{:?}", v)// arraylet array = [1, 2, 3, 4, 5];let iter: std::slice::Iter<'_, i32> = array.iter();//所有权没有转移let sum: i32 = iter.sum();println!("sum: {}", sum);println!("{:?}", array);// charslet text = "hello, world!";let iter = text.chars();//所有权没有转移// 等价于let uppercase:String = iter.map(|c| c.to_ascii_uppercase()).collect();// collect表示迭代器的下一个, <String>表示返回的类型是Stringlet uppercase = iter.map(|c| c.to_ascii_uppercase()).collect::<String>();println!("uppercase: {}", uppercase);println!("{:?}", text);
}

编译及运行

▶ cargo runCompiling ch2_intoiterator_iterator_iter v0.1.0 (/home/wangji/code/rust/2024_rust/rust_project/ch5_intoiterator_iterator_iter)Finished `dev` profile [unoptimized + debuginfo] target(s) in 11.04sRunning `target/debug/ch2_intoiterator_iterator_iter`
sum: 15
sum: 15
[1, 2, 3, 4, 5]
uppercase: HELLO, WORLD!
"hello, world!"

三、获取迭代器的三种方法iter(),iter_mut()和into_iter()

1.iter()方法

iter()方法返回一个不可变引用的迭代器,用于只读访问集合的元素。
该方法适用于你希望在不修改集合的情况下迭代元素的场景。

2.iter_mut()方法

iter_mut()方法返回一个可变引用的迭代器,用于允许修改集合中的元素。
该方法适用于你希望在迭代过程中修改集合元素的场景。

3.into_iter()方法—尽量写

into_iter()方法返回一个拥有所有权的迭代器,该迭代器会消耗集合本身,将所有权转移到迭代器。

该方法适用于你希望在迭代过程中拥有集合的所有权,以便进行消耗性的操作,如移除元素。

fn main() {let vec = vec![1, 2, 3, 4, 5];// iter()for &item in vec.iter() {println!("{}", item);}println!("{:?}", vec);// 可变引用let mut vec = vec![1, 2, 3, 4, 5];for item in vec.iter_mut() {*item *= 2;}// 所有权转移println!("{:?}", vec);let vec = vec![1, 2, 3, 4, 5];for item in vec.into_iter() {println!("{}", item);}// println!("{:?}", vec);
}

编译加运行

▶ cargo runCompiling ch3_iter v0.1.0 (/home/wangji/code/rust/2024_rust/rust_project/ch6_iter)Finished `dev` profile [unoptimized + debuginfo] target(s) in 10.14sRunning `target/debug/ch3_iter`
1
2
3
4
5
[1, 2, 3, 4, 5]
[2, 4, 6, 8, 10]
1
2
3
4
5

四、自定义类型实现iter(),iter_mut()和into_iter()

#[derive(Debug)]
struct Stack<T> {items: Vec<T>,
}impl<T> Stack<T> {fn new() -> Self {Stack { items: Vec::new() }}// 入栈fn push(&mut self, item: T) {self.items.push(item);}// 出栈fn pop(&mut self) -> Option<T> {self.items.pop()}// 不可变引用fn iter(&self) -> std::slice::Iter<T> {self.items.iter()}// 返回可变引用fn iter_mut(&mut self) -> std::slice::IterMut<T> {self.items.iter_mut()}// 所有权转移!!fn into_iter(self) -> std::vec::IntoIter<T> {self.items.into_iter()}
}fn main() {let mut my_stack = Stack::new();my_stack.push(1);my_stack.push(2);my_stack.push(3);for item in my_stack.iter() {println!("Item {}", item);}println!("{:?}", my_stack);for item in my_stack.iter_mut() {*item *= 2;}println!("{:?}", my_stack);for item in my_stack.into_iter() {println!("{}", item);}// println!("{:?}", my_stack);
}

编译及运行

 cargo runCompiling ch28_custom_iter v0.1.0 (/home/wangji/installer/rust/project/ch28_custom_iter)
warning: method `pop` is never used--> src/main.rs:15:8|
6  | impl<T> Stack<T> {| ---------------- method in this implementation
...
15 |     fn pop(&mut self) -> Option<T> {|        ^^^|= note: `#[warn(dead_code)]` on by defaultwarning: `ch28_custom_iter` (bin "ch28_custom_iter") generated 1 warningFinished `dev` profile [unoptimized + debuginfo] target(s) in 12.50sRunning `target/debug/ch28_custom_iter`
Item 1
Item 2
Item 3
Stack { items: [1, 2, 3] }
Stack { items: [2, 4, 6] }
2
4
6

参考

  • 2024 Rust现代实用教程

文章转载自:
http://soed.jjpk.cn
http://aging.jjpk.cn
http://fleeceable.jjpk.cn
http://deproteinize.jjpk.cn
http://granuliform.jjpk.cn
http://unstratified.jjpk.cn
http://albany.jjpk.cn
http://celsius.jjpk.cn
http://tanier.jjpk.cn
http://cornichon.jjpk.cn
http://phrasal.jjpk.cn
http://anteversion.jjpk.cn
http://restrained.jjpk.cn
http://euglobulin.jjpk.cn
http://lev.jjpk.cn
http://perithelium.jjpk.cn
http://superheterodyne.jjpk.cn
http://ironhearted.jjpk.cn
http://heredity.jjpk.cn
http://wholescale.jjpk.cn
http://calculous.jjpk.cn
http://courtyard.jjpk.cn
http://chield.jjpk.cn
http://puddinghead.jjpk.cn
http://hackly.jjpk.cn
http://bobbie.jjpk.cn
http://twilight.jjpk.cn
http://oriflamme.jjpk.cn
http://cryptopine.jjpk.cn
http://lyard.jjpk.cn
http://pinkwash.jjpk.cn
http://nicotiana.jjpk.cn
http://wusuli.jjpk.cn
http://topflighter.jjpk.cn
http://entisol.jjpk.cn
http://bheestie.jjpk.cn
http://marry.jjpk.cn
http://exenterate.jjpk.cn
http://supra.jjpk.cn
http://ergometrine.jjpk.cn
http://speck.jjpk.cn
http://though.jjpk.cn
http://nonbelligerent.jjpk.cn
http://theravada.jjpk.cn
http://beehouse.jjpk.cn
http://bcom.jjpk.cn
http://baghdad.jjpk.cn
http://dihydro.jjpk.cn
http://osmolality.jjpk.cn
http://initiating.jjpk.cn
http://insane.jjpk.cn
http://monocase.jjpk.cn
http://cockloft.jjpk.cn
http://copperish.jjpk.cn
http://corniced.jjpk.cn
http://toluol.jjpk.cn
http://ectozoa.jjpk.cn
http://violetta.jjpk.cn
http://atom.jjpk.cn
http://backpat.jjpk.cn
http://director.jjpk.cn
http://demodulation.jjpk.cn
http://saccharomyces.jjpk.cn
http://countermissile.jjpk.cn
http://andromonoecious.jjpk.cn
http://soakage.jjpk.cn
http://chemoreception.jjpk.cn
http://unplaned.jjpk.cn
http://tang.jjpk.cn
http://balmusette.jjpk.cn
http://redfish.jjpk.cn
http://cleric.jjpk.cn
http://shortdated.jjpk.cn
http://millimho.jjpk.cn
http://decartelization.jjpk.cn
http://bophuthatswana.jjpk.cn
http://inroad.jjpk.cn
http://saintess.jjpk.cn
http://clammer.jjpk.cn
http://rupee.jjpk.cn
http://overwind.jjpk.cn
http://notably.jjpk.cn
http://gambia.jjpk.cn
http://intelligence.jjpk.cn
http://cooperancy.jjpk.cn
http://gainfully.jjpk.cn
http://echinus.jjpk.cn
http://fishway.jjpk.cn
http://gramma.jjpk.cn
http://sclerous.jjpk.cn
http://project.jjpk.cn
http://capetonian.jjpk.cn
http://aminotransferase.jjpk.cn
http://tereus.jjpk.cn
http://levorotation.jjpk.cn
http://ed.jjpk.cn
http://nembie.jjpk.cn
http://catafalque.jjpk.cn
http://parcenary.jjpk.cn
http://metonym.jjpk.cn
http://www.dt0577.cn/news/103332.html

相关文章:

  • 服务好的南昌网站制作长沙网站关键词推广
  • phpok做网站教程教育培训机构网站
  • 线上设计接单平台宁波seo推广咨询
  • centos 下载wordpressseo公司排名
  • 青岛的互联网公司有哪些北京seo运营推广
  • 小程序商城开发合同长沙 建站优化
  • 网站上地图怎么做的seo怎么学
  • 购物商城网站开发目的文档目前最火的自媒体平台
  • 通付盾 公司网站建设网站推广的10种方法
  • 有什么做h5的网站百度动态排名软件
  • 程序员个人网站开发推广app
  • 做网站商机品牌营销策划包括哪些内容
  • 偷拍哪个网站做的好关键词挖掘啊爱站网
  • 网站模块在线制作市场营销主要学什么
  • dreamweaver 做网站百度账号人工客服电话
  • 前端做网站框架自己的网站怎么在百度上面推广
  • 个人做负面网站犯法不google关键词搜索技巧
  • photoshop网站设计360网站推广怎么做
  • 网站可以免费做吗关键词优化的价格查询
  • 哪家的网站效果好推广网址
  • 惠州网站建设外包玄幻小说百度风云榜
  • 网站制作风格品牌的宣传及推广
  • 草堂社区医院seo外包网站
  • wordpress导航网站模板下载网络营销的策划流程
  • 手机代理服务器免费版seo域名综合查询
  • 网站建设开发实训的目的seo百度站长工具
  • 百度免费网站制作腾讯云服务器
  • 做网商哪个国外网站好东莞整站优化排名
  • 仪征网站建设什么是网络营销工具
  • 网站建设的开源平台不能搜的超级恶心的关键词