ベクター
ベクターはサイズ変更可能な配列です。スライスと同様に、そのサイズはコンパイル時にはわかりませんが、いつでも拡大または縮小できます。ベクターは次の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 モジュールにあります