kuretchi's blog

kuretchi's blog

競技プログラミングなどなど...

Rust の多次元 Vec を初期化するマクロ

小ネタ.

Rust で多次元 Vec (dp[0][1][2] のように使えるもの) を作りたい.例えば None で初期化された $2 \times 3 \times 4$ の Vec<Vec<Vec<Option<T>>>> を作るときはこう書く.

vec![vec![vec![None; 4]; 3]; 2]

うーん.という訳でこんなマクロ.

macro_rules! nested_vec {
  ($e:expr; $n:expr) => {
    vec![$e; $n]
  };
  ($e:expr; $n:expr $(; $m:expr)+) => {
    vec![nested_vec!($e $(; $m)+); $n]
  };
}

こんな風に書ける.

nested_vec![None; 2; 3; 4]