LoginSignup
0
0

More than 3 years have passed since last update.

Vec

Last updated at Posted at 2020-09-20

Vec

VecとはRustにおける可変長の配列です。
複数のデータを保存して番号で管理したり、順番に処理することが簡単にできます。

使い方

push() pop()メソッドにより、スタックのように値を追加・削除出来ます。
要素数を知るにはlen()メソッドを使用します。
[]演算子により、任意の要素にアクセスできます。
Vecには他にも様々な機能がありますが、以上の操作とfor文・イテレータで大抵のことは出来ると思います。

fn main() {
    //空のVecを作成。
    //型推論が可能であれば、型の注釈は不要。
    let mut my_vec = Vec::new();

    //push()メソッドは最後尾にデータを追加する。
    //5を追加したため、要素の型がi32であると推論できる。
    my_vec.push(5);

    //いくつか適当に追加する。
    my_vec.push(2);
    my_vec.push(7);
    my_vec.push(4);

    //len()メソッドで要素数を取得できる。
    //4つ値を入れたため、要素数は4となる。
    println!("my_vecの要素数は{:?}です。",my_vec.len());

    //要素にアクセスするには[]を使う。
    //インデックスは0始まり。
    println!("0番目のデータは{:?}です。",my_vec[0]);

    //my_vecの各要素をelementに束縛してループ処理をする。
    let mut average = 0;
    for element in &my_vec {
        average += element;
    }
    average /= my_vec.len();

    //イテレータを作成することが出来る。
    let sum:usize = my_vec.iter().sum();
    println!("合計は{}、平均は{}です。",average,sum);

    //pop()メソッドは最後尾のデータを取り出す。
    //データが1つも無い場合はNoneを、それ以外の場合はSome(要素)を返す。
    println!("最後尾のデータは{:?}です。",my_vec.pop());
    println!("最後尾のデータは{:?}です。",my_vec.pop());

    //pop()メソッドを2回呼び出したため、要素数は2個減る。
    println!("my_vecの要素数は{:?}です。",my_vec.len());
}

実行結果

my_vecの要素数は4です。
0番目のデータは5です。       
合計は4、平均は18です。      
最後尾のデータはSome(4)です。
最後尾のデータはSome(7)です。
my_vecの要素数は2です。

Vecの作成方法

Vec::new()以外にも、作成する方法がいくつかあります。
特に、vec!マクロはリテラルのようにVecを記述出来て便利です。

fn main() {
    //vec!マクロでリテラルのようにVecを記述することが出来る。
    let names = vec!["太郎","花子","京子","剛士","博之","佳代子"];
    println!("{:?}",names);

    //イテレータをcollect()メソッドで収集することで作成できる。
    let nombers = (1..10).collect::<Vec<i32>>();
    println!("{:?}",nombers);

    //あらかじめ要素数を指定することが出来る。
    //最大の要素数が分かっている場合、メモリの再確保を未然に防ぐことが出来る。
    //メモリは確保しているが、要素数は0。
    let capacity:Vec<f32> = Vec::with_capacity(100000);
    println!("{:?}",capacity);

    //to_vec()メソッドで配列をVecに変換することが出来る。
    let array = [1,2,3,4,5,6,7,8,9,10];
    let mut from_array = array.to_vec();

    //append()メソッドでVec同士を繋げることが出来る。
    let mut base = vec![10,9,8,7,6,5,4,3,2,1];
    base.append(&mut from_array);
    println!("{:?}",base);
}

目次

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0