Rust覚え書き

First, you’d better refer to Rust by Example for best solutions (of course, they’re the pro!).

入出力

String型のbufへの入力

use std::io::Read;

fn main() {
    let mut buf = String::new();
    std::io::stdin().read_to_string(&mut buf).unwrap();
}

i64型の配列への入力

let mut iter = buf.split("\n");
let v1:Vec<i64> = iter.next().unwrap().split_whitespace().map(|x| x.parse::<i64>().unwrap()).collect();

もしくは可読性を上げて

let mut iter = buf.split("\n");
let v1:Vec<i64> = iter.next().unwrap().split_whitespace().map(|x| {
                    x.parse::<i64>().unwrap()
                  }).collect();

配列

VectorでもArrayでもいい。Collect()するとVec<T>になる。

Arrayの初期化

分かっている状態での初期化
let arr: [T; num of elements] = [直書き]
繰り返したいとき
let arr: [T; num of elements] = [elem; num of elements]

debug

type check

use std::any::type_name;

fn type_of<T>(_: T) -> &'static str {
    type_name::<T>()
}

test

関数はlib.rsに書く lib.rs内ではcrate::fnmain.rs内では(crate name)::fnで関数にアクセスする。

lib.rsの例:

#[cfg(test)]

mod test {
  #[test]
  fn solve_test() {
    assert_eq!(crate::solve(something), ans);
  }
}

main.rsの例:

fn main() {
  println!("{}", compro::solve(&buf));
}