Rust 配列の取り扱いについて
簡単に文法を学んだので、AtCoder Beginners Selectionを試しに解いてみて配列の取り扱いがよくわからなくなったので教えていただきたいです。
解いた問題はこちらです。
ABC085B - Kagami Mochi
配列だと変更できないと思い、ベクターに入れ替えたのち、重複を消して要素数を解答しました。
fn main() {
input! {
n:i32,
a:[i32;n],
}
let mut num_list = vec![];
for i in a {
num_list.push(i);
}
num_list.sort();
num_list.dedup();
println!("{}", num_list.len());
}
しかし、配列でもmutで宣言すれば解答できました。
再宣言するようなものだから、エラーとならなかったのでしょうか。
fn main() {
input! {
n:i32,
mut list:[i32;n],
}
list.sort();
list.dedup();
println!("{}", list.len());
}
試しに配列を作って操作したのが下のコードになります。
挙動が違うのは、input!マクロで受け取ったものと、自分で設定した差でしょうか。
fn main() {
let x = [1, 2, 1, 4];
println!("{:?}", x);
//[1, 2, 1, 4]
x.sort();
//mutableではないからエラーはわかる
x.dedup();
println!("{:?}", x);
//もちろん重複は消せない
let mut x = [1, 2, 1, 4];
println!("{:?}", x);
//[1, 2, 1, 4]
x.sort();
println!("{:?}", x);
//[1, 1, 2, 4]
x.dedup();
println!("{:?}", x);
//sortはできるけど要素数の変更はできない?
}
0