标准库中有很多集合容器,它们以各种逻辑组织了数据,允许各种各样的操作,如增删改查等
标准库中有很多集合容器,它们以各种逻辑组织了数据,允许各种各样的操作,如增删改查等。除了Vec<T>之外,它们都在std::collections
模块下
Vec<T>是基于结构体而实现的数据结构,它有一个Trait是:Allocator,默认值 Global,Global是Rust默认的全局分配器,在程序运行时分配和释放内存,使用时只用T就可以了
泛型声明后却不使用,这是不是让你联想到了PhantomData<T>?这其实是Rust灵活性的体现,一方面Rust制定了很严格的规则来进行约束,比如生命周期和泛型、所有权规则,但另一方面,Rust也针对特殊场景做了调整,比如我们前面分享过的共享可变容器Cell与RefCell。这些调整让Rust拥有严格的规范之外还拥有较强的灵活性
Vec<T>的应用很广泛,最常见的情况之一就是Vec<u8>与&str、String的转换
除了换之外,也可以用作简单的队列,使用pop,push等方法操作里面的元素
可以使用shrink_to
和shrink_to_fit
方法来调整Vec的容量
示例代码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
更多内容欢迎关注公众号拾一维
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!