特定のサイズのゼロのベクトルを作成する 質問する

特定のサイズのゼロのベクトルを作成する 質問する

実行時に決定される特定のサイズでゼロのベクトルを初期化したいと思います。

C では次のようになります:

int main(void)
{
    uint size = get_uchar();
    int A[size][size];
    memset(A, 0, size*size*sizeof(int));
}

これは私が Rust で書いてみたヘルパー関数ですが、スライス構文がコンパイラーに悪影響を与えていると思います0..size。また、C バージョンよりも冗長に見えます。これを実行するためのより慣用的な方法はありますか?

fn zeros(size: u32) -> Vec<i32> {
    let mut zero_vec: Vec<i32> = Vec::with_capacity(size);
    for i in 0..size {
        zero_vec.push(0);
    }
    return zero_vec;
}

昔のドキュメントでは、from_elem()メソッドを説明していたと断言できますここそして、[0 ; size] 表記効きそうだ

最終的にはこれを部分文字列検索アルゴリズムに組み込みたいと思います。

pub fn kmp(text: &str, pattern: &str) -> i64 {
    let mut shifts = zeros(pattern.len()+1);
}

ベストアンサー1

指定された長さのゼロ (またはその他の定数値) のベクトルを初期化するには、次のvec!マクロを使用できます。

let len = 10;
let zero_vec = vec![0; len];

そうは言っても、構文を少し修正するだけで関数は機能しました。

fn zeros(size: u32) -> Vec<i32> {
    let mut zero_vec: Vec<i32> = Vec::with_capacity(size as usize);
    for i in 0..size {
        zero_vec.push(0);
    }
    return zero_vec;
}

uintは Rust 1.0 では存在しなくなり、sizeとしてキャストする必要がありusize、ベクトルの型が一致する必要がありました (let mut zero_vec: Vec<i64>に変更されましたlet mut zero_vec: Vec<i32>

おすすめ記事