7 个版本 (4 个破坏性版本)

0.5.1 2023 年 10 月 24 日
0.5.0 2023 年 10 月 24 日
0.4.1 2023 年 10 月 20 日
0.3.0 2023 年 10 月 20 日
0.1.0 2023 年 10 月 17 日

#884Rust 模式

Download history 24/week @ 2024-04-01 86/week @ 2024-04-15

每月 54 次下载

MIT/Apache

20KB
364

嵌套向量的工具

Crates.io Downloads Documentation License Dependency Status

如果你认为需要使用这个 crate,再考虑一下。一般来说,Vec<Vec<T>> 是一种反模式,因为它不是连续的 -> 不是缓存友好的 -> 慢。几乎总是,对于缓冲区,你可以并应该使用一个 small_vec::SmallVecVec<T>,如果可能的话。例如,如果你有一个动态大小的矩阵,你应该使用所选的连续缓冲区以及可能的一些维度数据。

然而,如果你认为你有使用嵌套向量的合法用例,这个 crate 提供了你可能想要使用的 PoppingIteratorLendingIterLendingIterMut

示例

use vec_vec::VecVecExt;

fn main() {
     let mut v = vec![vec![2, 3, 5], vec![], vec![7, 11, 13]];
     let mut iter = v.popping_iter();
    
     assert_eq!(iter.next(), Some(13));
     drop(iter);
     assert_eq!(v, vec![vec![2, 3, 5], vec![], vec![7, 11]]);
    
     let mut iter = v.popping_iter();
     assert_eq!(iter.next(), Some(11));
     assert_eq!(iter.container(), &vec![vec![2, 3, 5], vec![], vec![7]]);
    
     assert_eq!(iter.next(), Some(7));
     assert_eq!(iter.container(), &vec![vec![2, 3, 5], vec![], vec![]]);
    
     assert_eq!(iter.next(), Some(5));
     assert_eq!(iter.container(), &vec![vec![2, 3]]);
    
     assert_eq!(iter.next(), Some(3));
     assert_eq!(iter.container(), &vec![vec![2]]);
    
     assert_eq!(iter.next(), Some(2));
     assert_eq!(iter.container(), &vec![vec![]]);
    
     assert_eq!(iter.next(), None);
     assert_eq!(iter.container(), &Vec::<Vec<_>>::new());
}

另请参阅

  • stack-trait,它提供了带有入口 API 的栈 trait,这对于避免预 Polonius NLL 借用检查器的限制很有用。

依赖关系

~1.5MB
~37K SLoC