1个不稳定版本
使用旧的Rust 2015
0.7.0 | 2024年7月7日 |
---|
在数据结构中排名651
每月下载量137
在3 crates中使用
99KB
2K SLoC
用法
将此添加到您的Cargo.toml中
[dependencies]
bit-vec = "0.7"
自Rust 2018起,extern crate
不再强制。如果您的版本较旧(Rust 2015),请将其添加到crate根目录
extern crate bit_vec;
如果您想使用serde支持,请按如下方式包含功能
[dependencies]
bit-vec = { version = "0.7", features = ["serde"] }
如果您想在具有#![no_std]
的程序中使用bit-vec,只需删除默认功能
[dependencies]
bit-vec = { version = "0.7", default-features = false }
如果您想使用alloc crate而不是std来使用serde,只需使用serde_no_std
功能
[dependencies]
bit-vec = { version = "0.7", default-features = false, features = ["serde", "serde_no_std"] }
如果您想使用borsh-rs支持,请按如下方式包含它
[dependencies]
bit-vec = { version = "0.7", features = ["borsh"] }
其他可用的序列化库可以通过miniserde
和nanoserde
功能启用。
描述
使用紧凑的位向量实现的动态集合。
示例
这是一个埃拉托斯特尼筛法的简单示例,它计算给定限制内的质数。
use bit_vec::BitVec;
let max_prime = 10000;
// Store the primes as a BitVec
let primes = {
// Assume all numbers are prime to begin, and then we
// cross off non-primes progressively
let mut bv = BitVec::from_elem(max_prime, true);
// Neither 0 nor 1 are prime
bv.set(0, false);
bv.set(1, false);
for i in 2.. 1 + (max_prime as f64).sqrt() as usize {
// if i is a prime
if bv[i] {
// Mark all multiples of i as non-prime (any multiples below i * i
// will have been marked as non-prime previously)
for j in i.. {
if i * j >= max_prime {
break;
}
bv.set(i * j, false)
}
}
}
bv
};
// Simple primality tests below our max bound
let print_primes = 20;
print!("The primes below {} are: ", print_primes);
for x in 0..print_primes {
if primes.get(x).unwrap_or(false) {
print!("{} ", x);
}
}
println!();
let num_primes = primes.iter().filter(|x| *x).count();
println!("There are {} primes below {}", num_primes, max_prime);
assert_eq!(num_primes, 1_229);
许可证
双许可,以与Rust项目兼容。
在您的选择下,根据Apache License Version 2.0:https://apache.ac.cn/licenses/LICENSE-2.0或MIT许可:http://opensource.org/licenses/MIT进行许可。
依赖项
~0–485KB
~10K SLoC