質問: find(y);} int size(int x) { return -d[find(x)];} }; ``` これでUnionFindを定義しているのですが, 最初の部分の, ``` UnionFind(int n=0): d(n,-1) {} ``` の意味がわかりません. Pythonで言うところでは `__init__` のようなものなのでしょうか? また, いままでC++では `:` の記号はあまり用いておりませんでしたので, その点を含めてご教授いただきたいです. ご回答のほどよろしくお願い致します.
回答: これは構造体のコンストラクタの定義です。C++ の「コンストラクタ」とは、大雑把に言うと「初期化時に呼ばれる関数」という意味で Python の `__init__` と似たものです。これがコンストラクタだと分かるのは、名前が構造体そのものと同じ(ように見える)からです。 一番素朴なコンストラクタ定義は、次のようなものです。 ``` UnionFind() {} ``` このように定義すると何もしないコンストラクタが定義できます。 今回のコンストラクタでは、これに対してふたつの要素が追加されています: ``` UnionFind(int n=0): d(n,-1) {} ``` 1. ひとつは引数です。`(int n=0)` の部分です。`int` 型の引数 `n` を設け、更にこれが省略されたときのデフォルト値を `0` としています。 2. もうひとつはデフォルトメンバ初期化子です。コロンの後に続く `d(n,-1)` の部分です。ここには構造体のメンバをどう初期化するかを書けます。今回 `d` は `vector` なので、vector のコンストラクタを使って初期化されます。具体的には `d` は全ての要素が `-1` で初期化された長さ `d` の vector として初期化されます。 より詳しくは、C++ の入門書などを参考になさってみてください。