20个版本

使用旧Rust 2015

0.8.0 2024年7月16日
0.6.3 2020年12月4日
0.6.2 2020年5月6日
0.6.1 2019年6月1日
0.4.0 2015年7月10日

#8数据结构

Download history 803639/week @ 2024-05-04 852977/week @ 2024-05-11 920997/week @ 2024-05-18 822228/week @ 2024-05-25 763239/week @ 2024-06-01 976547/week @ 2024-06-08 839667/week @ 2024-06-15 829851/week @ 2024-06-22 649217/week @ 2024-06-29 847253/week @ 2024-07-06 818159/week @ 2024-07-13 865739/week @ 2024-07-20 879858/week @ 2024-07-27 1018802/week @ 2024-08-03 1185670/week @ 2024-08-10 946705/week @ 2024-08-17

4,178,504 每月下载量
6,037 个crate(246个直接使用) 中使用

Apache-2.0 OR MIT

105KB
2K SLoC

bit-vec

紧凑的位向量。

crates.io Documentation Rust CI rustc 1.0+ serde_derive: rustc 1.31+

Dependency Status Download Status

用法

将此添加到您的Cargo.toml中

[dependencies]
bit-vec = "0.8"

自Rust 2018以来,extern crate 已不再是强制性的。如果您的版本较旧(Rust 2015),请将其添加到crate根目录

extern crate bit_vec;

如果您想添加 serde 支持,请按照如下方式包含功能

[dependencies]
bit-vec = { version = "0.8", features = ["serde"] }

如果您想在具有 #![no_std] 的程序中使用 bit-vec,只需删除默认功能

[dependencies]
bit-vec = { version = "0.8", default-features = false }

如果您想使用 alloc crate 代替 std 并与 serde 一起使用,请使用 serde_no_std 功能

[dependencies]
bit-vec = { version = "0.8", default-features = false, features = ["serde", "serde_no_std"] }

如果您想添加 borsh-rs 支持,请按照如下方式包含它

[dependencies]
bit-vec = { version = "0.8", features = ["borsh"] }

其他可用的序列化库可以通过启用 miniserdenanoserde 功能来启用。

描述

使用紧凑的位向量实现的动态集合。

示例

这是一个计算给定限制以内素数的 埃拉托斯特尼筛法 的简单示例。

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: http://www.apache.org/licenses/LICENSE-2.0,或MIT许可证: http://opensource.org/licenses/MIT,任选其一。

依赖项

~0–485KB
~10K SLoC