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

Rust: Vec类型的into_boxed_slice()方法

比如,我们经常看到Vec类型,但取转其裸指针,经常会看到into_boxed_slice()方法,这是为何?

use std::{fmt, slice};#[derive(Clone, Copy)]
struct RawBuffer {ptr: *mut u8,len: usize,
}impl From<Vec<u8>> for RawBuffer {fn from(vec: Vec<u8>) -> Self {let slice = vec.into_boxed_slice();Self {len: slice.len(),// into_raw 之后,Box 就不管这块内存的释放了,RawBuffer 需要处理释放ptr: Box::into_raw(slice) as *mut u8,}}
}

其实,你看标准文档,就很清楚,

pub fn into_boxed_slice(self) -> Box<[T], A>//Converts the vector into Box<[T]>.//If the vector has excess capacity, its items will be moved into a newly-allocated buffer with exactly the right capacity.

也就是说,转成了Box<[T]>后,指针所指向的类型,更简短了。

let v = vec![1, 2, 3];
let slice = v.into_boxed_slice();
let mut vec = Vec::with_capacity(10);
vec.extend([1, 2, 3]);assert!(vec.capacity() >= 10);
let slice = vec.into_boxed_slice();
assert_eq!(slice.into_vec().capacity(), 3);

这样,从操作上来讲,更加节省内存空间。

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

相关文章:

  • Python - Opencv + pyzbar实时摄像头识别二维码
  • 网络安全(黑客)就业分析指导
  • MySQL 主从复制的认识 2023.07.23
  • elasticsearch查询操作(API方式)
  • Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot
  • 理解Android中不同的Context
  • linux判断端口是否占用(好用)
  • springboot 自定义注解 ,实现接口限流(计数器限流)【强行喂饭版】
  • istio安装部署总结
  • Linux操作系统~必考面试题⑨
  • 国标GB28181协议视频平台EasyCVR修改录像计划等待时间较长的原因排查与解决
  • 线性代数(主题篇):第三章:向量组 、第四章:方程组
  • 大数据课程C4——ZooKeeper结构运行机制
  • 解决伪类元素‘after‘或者‘before‘遮挡父元素,导致鼠标移入或点击等事件不生效的问题
  • 电动汽车市场的减速,正在让小鹏汽车付出代价
  • Yarn上Streaming流自动调节资源设计
  • 微信小程序的个人博客--【小程序花园】
  • 智慧园区楼宇合集 | 图扑数字孪生管控系统
  • 【代码随想录day21】二叉搜索树中的众数
  • 【防火墙】iptables防火墙(一)
  • 微信小程序之富文本特殊处理
  • react-draft-wysiwyg富文本编辑器
  • P5721 【深基4.例6】数字直角三角形
  • 【电子设计大赛】2023 年全国大学生电子设计竞赛 仪器和主要元器件清单
  • (八九)如何与InfluxDB交互InfluxDB HTTP API
  • excel 生成sql技巧
  • 2023牛客暑期多校训练营2(D/E/F/H/I/K)
  • Ubuntu搭建Samba服务-学习记录
  • Unity Shader - if 和 keyword 的指令比较
  • 【C++入门到精通】C++入门 —— 类和对象(了解类和对象)