BitVec 错误地附加 0 而不是 1

Xit*_*Dev 4 bitvector rust data-structures

我是 Rust 的初学者。我正在尝试使用BitVec库来表示位数组。我开始通过附加 0 或 1 的序列来使用它,但我在这样做时遇到了一些问题。当我附加一个 x 0序列然后是一个 y 1 序列时,它所做的是附加 x+y 零。请注意,如果我之前只附加 1 而未附加 0,则它可以工作。这是我的代码:

extern crate bit_vec;
use bit_vec::BitVec;

fn main(){
    let mut bits = BitVec::new();   // creates an empty array of bits
    append_zero(&mut bits);
    append_one(&mut bits);
    append_zero(&mut bits);
    append_one(&mut bits);
    append_one(&mut bits);          // everything works perfectly till here
    append_n_ones(&mut bits, 2);    // this works
    append_n_zeroes(&mut bits, 3);  // this too
    append_n_ones(&mut bits, 2);    // this appends 2 zeroes instead!
    println!("{:?}", bits);
}

fn append_zero(vector: &mut BitVec) {
    vector.push(false);
}

fn append_one(vector: &mut BitVec) {
    vector.push(true);
}

fn append_n_zeroes(vector: &mut BitVec, n: usize) {
    let mut to_append = BitVec::from_elem(n, false);  // creates a BitVec with n 0s
    println!("trying to append: {:?}", to_append);
    vector.append(&mut to_append);
}

fn append_n_ones(vector: &mut BitVec, n: usize) {
    let mut to_append = BitVec::from_elem(n, true);  // creates a BitVec with n 1s
    println!("trying to append: {:?}", to_append);
    vector.append(&mut to_append);
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

trying to append: 11
trying to append: 000
trying to append: 11
010111100000
Run Code Online (Sandbox Code Playgroud)

请注意,最后一行应该是010111100011. 此外,在附加之前,11正确打印。但随后它附加00.

我正在使用这个网站来测试我的 Rust 代码,但在本地它有同样的问题。我试图查看BitVec 库代码,但它目前对于我的 Rust 水平来说太先进了。

小智 7

bit_vec箱,而旧的和流行的,是唯一的维护。我是替代品的作者bitvec,它的行为符合您的要求,并且(在我看来)是更好的产品。

您可以使用您的代码编写的替换bit_vecbitvecBitVec::from_elemBitVec::<Lsb0, usize>::repeat。不幸的是,bitvec在 Rust 游乐场上不可用,所以我不能直接向你展示。