如何在Rust中正确使用位数组?

18

我需要一个类,其功能与C++中的vector<bool>相等。 Rust文档介绍了BitVec,但在编译时使用use std::collections::BitVec会导致未解决的导入错误。根据一个拉取请求,已经删除了BitVec。是否有适当的替代品?


https://crates.io/search?q=BitVec - ildjarn
“Rust文档介绍了BitVec” -> 你能提供文档链接吗?也许这确实是一个文档错误。 - Lukas Kalbertodt
https://doc.rust-lang.org/1.2.0/std/collections/struct.BitVec.html - Vercetti
1
1.2.0... 了。;-] - ildjarn
@ildjarn,那么唯一的方法就是通过Cargo.toml使用它吗? - Vercetti
@Vercetti 你可以不用Cargo而使用crates,就是不建议这么做。 - Veedrac
1个回答

31
标准库中不存在专用的比特向量类型,而 Vec<bool> 没有像 C++ 的 vector<bool> 一样被专门优化。Rust 倡导使用外部包而不是构建一个庞大的标准库。这种情况下的事实上使用的包是bit-vec
您似乎找到了一份旧的标准库文档链接:https://doc.rust-lang.org/1.2.0/std/collections/struct.BitVec.html。请注意链接中的 1.2.0!当前版本的 Rust 是 1.25(截至2018年4月),也就是说 1.2 已经超过两年了。除此之外,BitVec 在 1.2 版本的文档中被标记为不稳定;它后来被移除了。

8
“Vec<bool>”没有像C++的“vector<bool>”那样进行特化,这是件好事。那不是一个好决定:让我们有一个行为不同的“vector”。 - Shepmaster
2
提醒一下:这个 crate "处于维护模式,因为缺乏维护者资源"。 - Alex
7
还有一个名字让人感到困惑的 bitvec crate,我发现它的功能比较丰富。 https://docs.rs/bitvec - Aleksandar Dimitrov
1
在我看来,相比于全面(且经过筛选)的标准库,更喜欢随机的 crates 只会浪费时间。目标不断变化,crates 时而受欢迎,时而被遗忘... 在 Common Lisp 中,我可以直接使用 bit-vector,而无需进行寻宝游戏... - BitTickler
@AleksandarDimitrov 我尝试使用那个bitvec库,但它的可用性很差。最终我为我的特定用例自己编写了代码。(arr.get(i).as_deref() == Some(&true)... 真的吗?哈哈) - BitTickler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接