import std;
全てをimportしてくれる魔法の呪文。
競プロだと、1つ1つimportするのが面倒でこれで済ませがち。
ただ、コードの可読性の面で微妙な上に、どのパッケージで定義されているかを意識せずに使えるせいで、細かい仕様を調べるときに苦労していて良くない。
また、std.uni.toUpper
と std.ascii.toUpper
が衝突するという実害もある。
あの関数はどこで定義されているのか
std.stdio
競プロには欠かせない標準入出力系のライブラリ。
readln
, readf
, writeln
, writef
など。
std.conv
型を変換してくれるすごい奴。
to!
。
std.string
文字列に関するいろんな処理。
標準入力を受け取った後の、chomp
とかsplit
、配列を出力する際のjoin
と入出力で大活躍する。
他にもreplace
やtoLower
, toUpper
が使える。知らんかった。
以上で挙げた関数の多くはstd.array
やstd.uni
からimportしてるものらしい。
std.algorithm
読んで字の如くアルゴリズム系。毎回algorithmのスペルが不安になるけど、コイツがいなければ制限時間内に解答の提出はままならない。
sort
(sort!
), map!
, filter!
, each!
, reduce!
, minElement
/maxElement
, sum
, uniq
など、探せば探すほどよく使う関数が出てくる。
std.range
empty
とかfront
/back
, popFront
/popBack
みたいなRangeをRangeたらしめる関数が定義されている。
特定の性質を持つRangeを生成する関数であるrepeat
やiota
もよく使う。
std.container
この間紹介したRedBlackTree はここ。
その他はynary heapなど、データを収める構造が定義されているから深掘りすればおもしろいかも。
結論
こう。
import std.stdio, std.conv, std.string, std.algorithm, std.range;
参考