2 个版本
0.1.1 | 2021年2月5日 |
---|---|
0.1.0 | 2021年2月5日 |
#1647 in 数据结构
10KB
134 行
一个库,允许在持有引用的同时还能进行推送。
如果为存储数据有另一个生命周期(此处称为 Owner
),则这是可能的。
插入的数据需要在内存中不移动,因为如果容器(Vec、HashMap...)需要重新分配,则会使得引用失效。这个保证由 trait StaticType
提供。
示例推送
use push_while_ref::{VecOwner, VecChild};
let mut vec = VecOwner::new();
let mut vec = vec.child();
let v1 = vec.push(Box::new(10));
let v2 = vec.push(Box::new(20));
assert_eq!(*v1, 10);
assert_eq!(*v2, 20);
示例插入
use push_while_ref::{HashMapOwner, HashMapChild};
let mut map = HashMapOwner::new();
let mut map = map.child();
let v1 = map.insert("10", Box::new(10));
let v2 = map.insert("20", Box::new(20));
assert_eq!(*v1, 10);
assert_eq!(*v2, 20);
lib.rs
:
一个库,允许在持有引用的同时还能进行推送。
如果为存储数据有另一个生命周期(此处称为 Owner
),则这是可能的。
插入的数据需要在内存中不移动,因为如果容器(Vec、HashMap...)需要重新分配,则会使得引用失效。这个保证由 trait StaticType
提供。
示例推送
use push_while_ref::{VecOwner, VecChild};
let mut vec = VecOwner::new();
let mut vec = vec.child();
let v1 = vec.push(Box::new(10));
let v2 = vec.push(Box::new(20));
assert_eq!(*v1, 10);
assert_eq!(*v2, 20);
示例插入
use push_while_ref::{HashMapOwner, HashMapChild};
let mut map = HashMapOwner::new();
let mut map = map.child();
let v1 = map.insert("10", Box::new(10));
let v2 = map.insert("20", Box::new(20));
assert_eq!(*v1, 10);
assert_eq!(*v2, 20);