### 1 unstable release

Uses old Rust 2015

0.7.0 | Jul 7, 2024 |
---|

#**824** in Data structures

**29** downloads per month

Used in **3** crates

**Apache-2.0 OR MIT**

99KB

2K
SLoC

## Usage

Add this to your Cargo.toml:

`[``dependencies``]`
`bit-vec ``=` `"`0.7`"`

Since Rust 2018,

is no longer mandatory. If your edition is old (Rust 2015),
add this to your crate root:`extern` `crate`

`extern` `crate` bit_vec`;`

If you want serde support, include the feature like this:

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

If you want to use bit-vec in a program that has

, just drop default features:`#!``[``no_std``]`

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

If you want to use serde with the alloc crate instead of std, just use the

feature:`serde_no_std`

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

If you want borsh-rs support, include it like this:

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

Other available serialization libraries can be enabled with the

and
`miniserde`

features.`nanoserde`

### Description

Dynamic collections implemented with compact bit vectors.

### Examples

This is a simple example of the Sieve of Eratosthenes which calculates prime numbers up to a given limit.

`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``)``;`

## License

Dual-licensed for compatibility with the Rust project.

Licensed under the Apache License Version 2.0: http://www.apache.org/licenses/LICENSE-2.0, or the MIT license: http://opensource.org/licenses/MIT, at your option.

#### Dependencies

~0–485KB