タグ

ブックマーク / shnya.jp (2)

  • Stories of Your Life and Others » Blog Archive » C++で文字列のsplit

    つい最近、C++の文字列splitが必要な場面がありました。 いい加減C++のsplitを毎回書くのが面倒になってきましたので、忘れないようにメモっておきたいと思います。 C++でsplitを書く方法はいくらでも方法があると思いますが、代表的な実装例をあげてみます。 boostが使える環境であれば一番最初の選択肢としてboostのstring algorithmを利用した方が車輪の再発明をしなくて済むかと思います。 ただ、競技プログラミングなどでは残念ながら利用できません。 find_first_ofを利用する方法 vector<string> split(const string &str, char delim){  vector<string> res;  size_t current = 0, found;  while((found = str.find_first_of

  • Story of Your Life » Blog Archive » fstreamのデストラクタを追ってみた話

    僕がC++をいいなぁと思う理由の一つに、RAIIが使えるという点がありました。 ただ最近RAIIに対して懐疑的に思えてきたので、そのことを書きたいと思います。 RAIIというのはオブジェクトのコンストラクタでファイルの初期化やロックの取得などリソースの獲得を行い、デストラクタでファイルのクローズやロックの開放など、リソースの開放を行うテクニックです。明示的にclose処理等を書く必要がないので、ファイルの閉じ忘れ、ロックの開放し忘れを防ぐことができます。 また処理の途中で例外の発生などの意図しない挙動が起きた際にもリソースが開放されることが保障されており、頑健なコードを書くことが可能となります。 Javaなどのガベージコレクションを持つ言語ではどのタイミングでオブジェクトが破棄されるかわらかないので、ファイルハンドルを開きっぱなしにしたり、ロックを持ち続けてしまう可能性もあってこのテク

  • 1