はじめに
この実験では、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 でさらに多くの実験を行って練習してください。