Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ベクター

ベクターはサイズ変更可能な配列です。スライスと同様に、そのサイズはコンパイル時にはわかりませんが、いつでも拡大または縮小できます。ベクターは次の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 ^ この行をコメントアウトしてください

    // `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 ^ この行をコメントアウトしてください

    // `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 モジュールにあります