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

rust std

目录

一,std基本数据结构

1,std::option

2,std::result

二,std容器

1,vector

三,std算法

1,排序

2,二分

(1)vector二分

(2)自定义二分


rust std 文档

一,std基本数据结构

1,std::option

(1)定义

pub enum Option<T> {None,Some(T),
}

这是一个枚举值,要么等于None,要么等于泛型Some

(2)is_some、is_none

	let x:Option<u32>=Some(2);assert_eq!(x.is_some(),true);assert_eq!(x.is_none(),false);let x:Option<u32>=None;assert_eq!(x.is_some(),false);assert_eq!(x.is_none(),true);

(3)is_some_and

	let x:Option<u32>=Some(2);assert_eq!(x.is_some_and(|x| x>1),true);

2,std::result

(1)定义

pub enum Result<T, E> {Ok(T),Err(E),
}

这也是个枚举值,要么是等于Option型的OK,要么是等于Option型的Err

2个模板类型可以一样也可以不一样。

(2)is_ok、is_err

	let x:Result<i32,i32>=Ok(1);assert_eq!(x.is_ok(),true);assert_eq!(x.is_err(),false);let x:Result<i32,&str>=Err("456");assert_eq!(x.is_ok(),false);assert_eq!(x.is_err(),true);

str类型要带取址符。

(3)is_ok_and、is_err_and

	let x:Result<i32,i32>=Ok(1);assert_eq!(x.is_ok_and(|x| x==1),true);assert_eq!(x.is_err(),false);let x:Result<i32,&str>=Err("456");assert_eq!(x.is_ok(),false);assert_eq!(x.is_err_and(|x| x=="456"),true);

(4)ok、err

这里又把result当成结构体,用ok、err取出2个成员值,但至少有一个成员是None值。

	let x:Result<i32,i32>=Ok(1);assert_eq!(x.ok(),Some(1));assert_eq!(x.err(),None);let x:Result<i32,&str>=Err("456");assert_eq!(x.ok(),None);assert_eq!(x.err(),Some("456"));

二,std容器

1,vector

fn main() {let mut nums=vec![1,2,4,3];println!("{}",nums.len());
}

三,std算法

1,排序

(1)vector排序

fn main() {let mut nums=vec![1,2,4,3];nums.sort();println!("{}",nums[3]);
}

vector的默认排序,从小到大排序,输出4

2,二分

(1)vector二分

fn search(nums: &Vec<i32>, target:i32)->i32{let res = nums.binary_search(&target);match res{Ok(x)=>x as i32,_=>-1}
}
fn main() {let nums =vec![1,2,4,5];println!("{}",search(&nums,1));println!("{}",search(&nums,4));println!("{}",search(&nums,7));
}

输出:

0
2
-1

(2)自定义二分

trait Solution{fn find(&self,low:i32,high:i32)-> i32;fn check_value(&self,x:i32)->bool;
}
struct SearchData{target:i32
}
impl Solution for SearchData{fn find(&self, low:i32,high:i32)-> i32{let mut low = low;let mut high = high;if self.check_value(high) == false{return high+1;}if self.check_value(low) == true{return low;}while high - low > 1 {let mid = (high + low)/2;if self.check_value(mid) == true{high = mid;}else {low = mid;}}return high;}fn check_value(&self,x:i32)->bool{if x*x*x>self.target{return true;}return false;}
}
fn main() {let x=SearchData{target:100};println!("{}",x.find(0,50));
}

输出5,即5是满足x*x*x>target的最小值。

http://www.lryc.cn/news/209643.html

相关文章:

  • SpringMVC(下)
  • 分布式操作系统的必要性及重要性
  • 【Javascript】定时器
  • 基于stm32的ADC读取烟雾报警器的数值
  • 无需更换vue-cli 脚手架 uniapp-搭建项目-H5-低版本安卓IOS兼容问题(白屏)(接口请求异常)
  • 【IO面试题 四】、介绍一下Java的序列化与反序列化
  • M1本地部署Stable Diffusion
  • java中的内存分配
  • Matter.js 插件:matter-wrap(世界是圆的)
  • HCIA --- ACL(访问控制列表)
  • Xcode自定义快捷键
  • jmeter界面压测过程卡死解决思路
  • 听GPT 讲Rust源代码--library/std(6)
  • 如何使用gpt提高效率
  • 配置VUE环境过程中 npm报错的处理方案以及VUE环境搭建过程
  • springboot 配置文件加载顺序
  • 二分查找java
  • 深入理解Java中的转义字符
  • VScode 调试 linux内核
  • Babylonjs学习笔记(五)——创建PBR材质
  • C++ -- 深入理解多态
  • 【Java】泛型通配符
  • NNDL:作业五
  • OpenAI大模型项目计划表(InsCode AI 创作助手)
  • MyBatis入门的第一个程序
  • React项目中使用zustand状态管理详细教程
  • Linux 扩展 root 文件系统
  • 19c-rac环境安装AHF
  • ESP32网络开发实例-Web控制按钮与硬件状态同步
  • 分享一下怎么做陪诊小程序