首页 > 其他分享 >rust 指针

rust 指针

时间:2023-11-04 14:45:15浏览次数:32  
标签:mut iter let each deref rust 指针

指针

deref()方法是将一个智能指针转换为底层数据类型的引用。

fn main() {
    let a = vec![1, 2, 3];
    a.iter().for_each(|f| println!("{}", f));
    // deref 方法是将一个智能指针转换为底层数据类型的引用。
    let b = a.deref();
    b.iter().for_each(|f| println!("{}", f));
}

在上述代码中,Vec是一个智能指针,所以 a.deref() 返回的是一个指向底层数据的引用,可以通过这个引用访问到原始的数据。
因此,a.iter().for_each() b.iter().for_each() 打印的内容相同,都是1, 2, 3。

这种用法在许多情况下都非常有用,例如将智能指针转换为对底层数据的可变引用以进行修改。示例如下:

fn main() {
    let mut v = vec![1, 2, 3];
    {
        let v_mut = v.get_mut(..).unwrap();
        v_mut[0] = 4;
        v_mut[1] = 5;
        v_mut[2] = 6;
    }
    assert_eq!(v, vec![4, 5, 6]);
}

在上面的例子中,通过调用deref_mut方法,我们可以获得一个指向底层数据的可变引用,然后就可以对它进行修改。

标签:mut,iter,let,each,deref,rust,指针
From: https://www.cnblogs.com/liuzonglin/p/17809311.html

相关文章

  • rust 析构器中做最终处理
    析构器中做最终处理Rust中,通常在析构函数中运行退出前必须运行的代码。#[derive(Debug)]pubstructA(u8);implDropforA{fndrop(&mutself){println!("Aexit")}}#[derive(Debug)]pubstructB(u8);implDropforB{fndrop(&mutself)......
  • rust 使用 take 和 replace 来保留所有值
    使用take和replace来保留所有值枚举类型enumMyEnum{A{name:String,x:u32},B{name:String},}使用std::mem::take()和std::mem::replace()在不克隆name的情况下修改name这种方式可以不用#[derive(Clone)],不存在内存分配。#![allow(unused)......
  • rust 使用借用类型作为参数
    使用借用类型作为参数编码时应该总是倾向于使用借用类型而不是借用所有类型。对于String类型来说,应该倾向于使用使用&str,而不是&String;#[allow(unused)]fnmain(){letstring:String="hello".to_string();letborrow_string:&String=&string;letborrow......
  • rust PBFT
    PBFT(PracticalByzantineFaultTolerance)PBFT(PracticalByzantineFaultTolerance)算法是一种分布式共识算法,旨在解决拜占庭将军问题(ByzantineGeneralsProblem)。拜占庭将军问题是指在分布式系统中,由于网络故障或者节点故障等原因,导致节点之间无法达成共识或者达成错误的共识。......
  • rust Unsurprising
    Unsurprising(不意外)最少意外原则接口应尽可能直观(可预测,用户能猜对)至少应该不让人感到惊奇核心思想贴近用户已经知道的东西(不必重学概念)让接口可测试命名实践实现常用的Traits人体工程学(Ergonomic)Traits包装类型(WrapperType)命名实践接口的名称,应符......
  • rust p2p
    p2p[+]Expanddescriptionp2p简介P2P:peer-to-peer(点对点)P2P是一种网络技术,可以在不同的计算机之间共享各种计算资源,如CPU、网络带宽和存储。P2P是当今用户在线共享文件(如音乐、图像和其他数字媒体)的一种非常常用的方法。Bittorrent和Gnutella是流行的文件共享p2p......
  • rust async
    asyncSend和Sync在跨线程时需要关注Send:ownership(所有权)可以send到其他线程AtypeisSendifitissafetosendittoanotherthread.Sync:可以并发,无线程安全问题AtypeisSyncifitissafetosharebetweenthreads(TisSyncifandonlyif&T......
  • Rust 结构体的方法描述
    Rust结构体的方法描述原文地址:https://rustwiki.org/zh-CN/rust-by-example/fn/methods.htmlRust的方法(method)是依附于对象的函数。这些方法通过关键字self来访问对象中的数据和其他。方法在impl代码块中定义。静态方法(staticmethod)静态方法不需要实例来调用,把结构体......
  • 实验3 类与数组、指针
    实验任务1Point.hpp1#pragmaonce23#include<iostream>4usingstd::cout;5usingstd::endl;67classPoint{8public:9Point(intx0=0,inty0=0);10~Point()=default;1112intget_x()const;13intget_y()co......
  • 【教3妹学编程-算法题】117. 填充每个节点的下一个右侧节点指针 II
    2哥 :3妹,听说你昨天去面试了,怎么样啊?3妹:嗨,别提了,让我回去等通知,估计是没有通知了,还浪费我请了一天假。2哥 :你又请假了啊,你是怎么跟你那个严厉的老板请假的。3妹:我说我2哥生病了,嘿嘿~2哥:一猜就是说我生病了,自从你找工作,我这一年都病了十几回了……3妹:没办法,假不好请嘛,我尽快......