C++初心者の私がC++をやめたくなった瞬間。 なにをいまさらな。 はじめに C++のstreamはとても良くできていて、これを用いたライブラリを作りたいのだけど、 本当に(主にパフォーマンス的な理由で)大丈夫なのとかそういう話。 初めにお断りしておきますが、以下の内容はすべてlinux+gcc4.3での話です。 streamは遅い ふつうにistreamからget()して、ostreamにputしてるとめちゃくちゃ遅い。 C言語のgetchar, putcharより10進数で1.5桁ぐらい遅いよ。 istream::readとかででかいブロック読めば大丈夫なのだけど、 細かい単位で読みたいことの方が多いよね。 そういうわけで、そういう場合にも速く転送することが可能なのかどうか調べてみる。 テストプログラム istreamの内容をostreamに転送するプログラムを6通り書いた。 その1:
ファイル読み出しコードの性能評価 C++でファイルの内容をメモリ上に読み出すコードを書いてみたところ、 書き方によって結構性能に差がありました。そこでちょっと性能を調べてみましたのでまとめておきます。 C++では、メモリ上でのデータ保持方法は色々ありそうですが、 代表的なものということで、std::stringとstd::vectorに保持するコードを4つ選んでみました。 1つめのコード。Case1とします。 // Case1 using namespace std; string Data(istreambuf_iterator<char>(ifstream(FileName, ios::in | ios::binary)), istreambuf_iterator<char>()); 一行でも書ける短いコードです。 2つめのコード。Case2とします。 // Case2 using n
ストリームの使い方 ストリームとは、C 言語での入出力用関数 printf、scanf などの代替という意味もあるのですが、もし cout、cin、cerr しか使っていないのであれば、それはかなり損をしています。何故ストリームなのでしょうか。 cout、cin、cerr 入出力先の切り替え ストリームオブジェクトの作成方法(その 1)、streambuf ストリームオブジェクトの作成方法(その 2)、ostream、istream cout、cin、cerr ページの先頭へ まずは、簡単なところから始めましょう。 cout、cin、cerr はそれぞれ、標準出力、標準入力、標準エラー出力のストリームの入出力に関連するクラスオブジェクトで、コンソールアプリケーションでは、main 関数に実行が移ったときに既にシステムによって構築され、使用できる状態になっています。これらは、次のように使いま
Last update 1999/09/22 iostreamの拡張 (C)平山直之 無断転載は禁止、リンクはフリー 誤字脱字の指摘は歓迎 iostreamの拡張について 例によって唐突ですが、iostreamの拡張について書いてみたいと思います。ここでいう「拡張」とは、自分でcinとかcoutみたいなものを作ろう、ということです。 「こんなもん一番最初に教えんなや」と比較的評判の悪いiostreamですが、 演算子オーバーロードがいわば「御法度」な使い方をされている メソッドの命名法がやたら変 などのように表面的に美しくないのが悪評の原因で、その辺に目をつぶれば実はそれなりによくできたシステムだったりします。 拡張方法も一度覚えると結構便利ですぜ。 iostream拡張の基礎知識 iostream、というと、そのインターフェイス(Java的な意味じゃなくて)であるところのstd::cin
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く