タグ別アーカイブ: C++

system関数とpopen関数を適当に選んではいけない

CやC++で、プログラムから他のコマンドを実行する方法はいくつかあると思います。

それらの内、system関数やpopen関数を使うのが、とりわけ簡単かと思いますが、これらを適当に選んではいけない、という事態に遭遇したので、せっかくなのでsystem関数とpopen関数の違いや選び方とかを交えながらブログのエントリにしておきます。

まず、system()とpopen()の違いを簡単に言うと、コマンドを実行する際、標準入力に書き込んだり標準出力への出力を利用したりしたい場合はpopen()を、ただ実行すれば良いだけなら、system()を使うべきです。

標準入力/出力が使える、という機能が増えているだけなら、いつでもpopenでもいいじゃないか!と思いきや、そこに罠(!?)があったのです!

続きを読む


C++ の std::map のキーに構造体を使う方法と、ハマったこと

C++のstd::mapのキーに、自分で定義した構造体やクラスを使うことができます。

その際、std::mapはデータを2分木で格納しているため、キーになる構造体やクラスに、比較演算子 < を定義してあげる必要があります。

自分で作った構造体やクラスだと、二つ提示されてもどっちが大きいとか小さいとかわからないもんね!

というわけで、以下は、intとchar[100]をもった構造体をキーとしたい場合のサンプル。

続きを読む