Rust のベクトル:リサイズ可能な配列の基礎

RustRustBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Rust のリサイズ可能な配列であるベクトルについて学びます。ベクトルはいつでも拡大または縮小できます。ベクトルは、データへのポインタ、長さ、および容量の 3 つのパラメータを使用して表されます。容量は、ベクトルに予約されているメモリ量を示し、長さが容量を超えると、ベクトルはより大きな容量で再割り当てされます。collect メソッドを使用して反復子をベクトルに収集し、vec! マクロを使用してベクトルを初期化し、push メソッドを使用して末尾に新しい要素を挿入し、len メソッドを使用して要素数を取得できます。また、インデックスを使用して要素にアクセスし、pop メソッドを使用して最後の要素を削除し、iter または iter_mut メソッドを使用してベクトルを反復処理することもできます。さらに、std::vec モジュールにはベクトル用のさまざまなメソッドが用意されています。

注: 実験でファイル名が指定されていない場合は、好きなファイル名を使用できます。たとえば、main.rs を使用して、rustc main.rs &&./main でコンパイルして実行できます。

ベクトル

ベクトルはリサイズ可能な配列です。スライスと同様に、そのサイズはコンパイル時にはわかりませんが、いつでも拡大または縮小できます。ベクトルは 3 つのパラメータを使用して表されます。

  • データへのポインタ
  • 長さ
  • 容量

容量は、ベクトルに予約されているメモリ量を示します。長さが容量より小さい限り、ベクトルは拡大できます。このしきい値を超える必要がある場合、ベクトルはより大きな容量で再割り当てされます。

fn main() {
    // 反復子をベクトルに収集できます
    let collected_iterator: Vec<i32> = (0..10).collect();
    println!("Collected (0..10) into: {:?}", collected_iterator);

    // `vec!` マクロを使用してベクトルを初期化できます
    let mut xs = vec![1i32, 2, 3];
    println!("Initial vector: {:?}", xs);

    // ベクトルの末尾に新しい要素を挿入します
    println!("Push 4 into the vector");
    xs.push(4);
    println!("Vector: {:?}", xs);

    // エラー! 不変ベクトルは拡大できません
    collected_iterator.push(0);
    // FIXME ^ Comment out this line

    // `len` メソッドは、現在ベクトルに格納されている要素数を返します
    println!("Vector length: {}", xs.len());

    // インデックス付けは角かっこを使用して行われます (インデックスは 0 から始まります)
    println!("Second element: {}", xs[1]);

    // `pop` はベクトルから最後の要素を削除して返します
    println!("Pop last element: {:?}", xs.pop());

    // 範囲外のインデックス付けはパニックを引き起こします
    println!("Fourth element: {}", xs[3]);
    // FIXME ^ Comment out this line

    // `Vector` は簡単に反復処理できます
    println!("Contents of xs:");
    for x in xs.iter() {
        println!("> {}", x);
    }

    // `Vector` は、反復処理回数を別の変数 (`i`) で列挙しながらも反復処理できます
    for (i, x) in xs.iter().enumerate() {
        println!("In position {} we have value {}", i, x);
    }

    // `iter_mut` のおかげで、可変 `Vector` も各値を変更できるように反復処理できます
    for x in xs.iter_mut() {
        *x *= 3;
    }
    println!("Updated vector: {:?}", xs);
}

さらに多くの Vec メソッドは std::vec モジュールの下で見つけることができます。

まとめ

おめでとうございます! あなたはベクトルの実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を行って練習してください。