09 Rust中的Vec<T>

  • 拾一维
  • 更新于 2023-03-13 08:43
  • 阅读 878

标准库中有很多集合容器,它们以各种逻辑组织了数据,允许各种各样的操作,如增删改查等

1 集合容器的种类

标准库中有很多集合容器,它们以各种逻辑组织了数据,允许各种各样的操作,如增删改查等。除了Vec<T>之外,它们都在std::collections模块下

9.1.png

2 Vec<T>原理与应用

2.1 Vec<T>实现原理

Vec<T>是基于结构体而实现的数据结构,它有一个Trait是:Allocator,默认值 Global,Global是Rust默认的全局分配器,在程序运行时分配和释放内存,使用时只用T就可以了

泛型声明后却不使用,这是不是让你联想到了PhantomData<T>?这其实是Rust灵活性的体现,一方面Rust制定了很严格的规则来进行约束,比如生命周期和泛型、所有权规则,但另一方面,Rust也针对特殊场景做了调整,比如我们前面分享过的共享可变容器Cell与RefCell。这些调整让Rust拥有严格的规范之外还拥有较强的灵活性

9.2.png

2.2 Vec<T>的应用

2.2.1 类型转换

Vec<T>的应用很广泛,最常见的情况之一就是Vec<u8>与&str、String的转换

9.3.png

2.2.2 当作队列

除了换之外,也可以用作简单的队列,使用pop,push等方法操作里面的元素

9.5.png

2.2.3 容量收缩

可以使用shrink_toshrink_to_fit方法来调整Vec的容量

9.4.png

示例代码Github地址:

https://github.com/shiyivei/from-principle-to-practice/blob/main/src/principle-and-practice/src/type_system/collection.rs

另外,可以选择clone本仓库代码,使用cargo doc --open阅读,体验更佳

git clone git@github.com:shiyivei/from-principle-to-practice.git
cd from-principle-to-practice
cargo doc --open

更多内容欢迎关注公众号拾一维

  • 原创
  • 学分: 1
  • 分类: Move
  • 标签: Rust 
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
拾一维
拾一维
For science, art and meaning