#collection #container #heap #vec #heap-allocated #packed

nested

用于嵌套集合(如 Vec<String>Vec<Vec<T>>)的内存高效容器

2 个版本

使用旧的 Rust 2015

0.1.1 2020年3月14日
0.1.0 2017年12月29日

数据结构 中排名 #1144

Download history 63502/week @ 2024-03-14 60357/week @ 2024-03-21 68848/week @ 2024-03-28 63398/week @ 2024-04-04 66347/week @ 2024-04-11 69680/week @ 2024-04-18 63806/week @ 2024-04-25 57639/week @ 2024-05-02 65889/week @ 2024-05-09 63157/week @ 2024-05-16 50011/week @ 2024-05-23 53503/week @ 2024-05-30 56364/week @ 2024-06-06 56959/week @ 2024-06-13 58612/week @ 2024-06-20 49575/week @ 2024-06-27

每月下载量 231,380
53 个crate中使用(直接使用2个)

MIT 许可证

16KB
305

nested

Build Status

用于嵌套集合的内存高效容器。

当您需要以下情况时,请使用此crate:

  • 您可能需要一个大的
    • Vec<String>
    • Vec<Vec<T>>
    • Vec<C> 其中 C 是堆分配的,动态大小的,并且可以实现 Collection 特性
  • 您实际上只需要使用借用项(&[T]&str

您将只有2个分配,而不是n + 1个。

示例

use nested::Nested;

let mut v = Nested::<String>::new();

// you can either populate it one by one
v.push("a");
v.push("bb".to_string());
v.push("hhh");
v.extend(vec!["iiiiii".to_string(), "jjjj".to_string()]);
assert_eq!(v.len(), 5);
assert_eq!(&v[0], "a");
assert_eq!(&v[1], "bb");

// or you can directly collect it
let mut v = ["a", "b", "c", "d", "e", "f", "g"].iter().collect::<Nested<String>>();
assert_eq!(v.len(), 7);

// it also provides basic operations
let u = v.split_off(2);
assert_eq!(u.get(0), Some("c"));

v.truncate(1);
assert_eq!(v.pop(), Some("a".to_string()));
assert_eq!(v.pop(), None);

基准测试

请参阅bench目录。

以下是收集src/lib.rs文件中所有单词的基准测试

test bench_nested_string      ... bench:      55,381 ns/iter (+/- 7,852)
test bench_nested_string_iter ... bench:      95,127 ns/iter (+/- 8,253)
test bench_vec_string         ... bench:     117,203 ns/iter (+/- 13,089)
test bench_vec_string_iter    ... bench:     142,245 ns/iter (+/- 24,701)

许可证

MIT

无运行时依赖