タグ付けされた質問 「iostream」

C ++ iostreamライブラリは、ストリームを使用して入出力機能を提供するオブジェクト指向ライブラリです。iostreamsクラスは、組み込み型のタイプセーフなI / Oをサポートし、>>および<<演算子をオーバーロードすることにより、ユーザー定義型をサポートするように拡張できます。

10
C ++では、stdinからの行の読み取りがPythonよりもはるかに遅いのはなぜですか?
PythonとC ++を使用してstdinから文字列入力の行を読み取ることを比較したかったのですが、私のC ++コードが同等のPythonコードよりも桁違いに実行されるのを見てショックを受けました。私のC ++はさびており、私はまだPythonのエキスパートではないので、何か間違っているのか、何かを誤解しているのかどうか教えてください。 (TLDR回答:ステートメントを含める:cin.sync_with_stdio(false)またはfgets代わりに使用してください。 TLDRの結果:質問の一番下までスクロールして、表を見てください。) C ++コード: #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; int main() { string input_line; long line_count = 0; time_t start = time(NULL); int sec; int lps; while (cin) { getline(cin, input_line); if (!cin.eof()) line_count++; }; sec = (int) time(NULL) - start; cerr &lt;&lt; "Read …

4
ループ条件内のiostream :: eof(つまり、while(!stream.eof()) `)が間違っていると見なされるのはなぜですか?
この回答iostream::eofで、ループ条件での使用は「ほぼ間違いなく」間違っているというコメントを見つけました。私は一般的に次のようなものを使用しますwhile(cin&gt;&gt;n)-これは暗黙的にEOFをチェックすると思います。 eofのチェックが明示的にwhile (!cin.eof())間違っているのはなぜですか? scanf("...",...)!=EOFCで使用する場合(問題なく使用することが多い)とどのように違いますか?
595 c++  iostream  c++-faq 

12
C ++:「std :: endl」vs「\ n」
多くのC ++の本には、このようなサンプルコードが含まれています... std::cout &lt;&lt; "Test line" &lt;&lt; std::endl; ...だから私もいつもそうしている。しかし、代わりに次のような作業中の開発者からの多くのコードを見てきました。 std::cout &lt;&lt; "Test line\n"; どちらかを優先する技術的な理由はありますか、それともコーディングスタイルの問題ですか?



5
ostreamの<<演算子を適切にオーバーロードする方法は?
行列演算のためにC ++で小さな行列ライブラリを書いています。しかし、私のコンパイラは文句を言いますが、以前はそうではありませんでした。このコードは6か月間棚に置いたままで、その間にコンピュータをdebian etchからlenny(g ++(Debian 4.3.2-1.1)4.3.2)にアップグレードしましたが、同じg ++のUbuntuシステムでも同じ問題があります。 これが私のマトリックスクラスの関連部分です: namespace Math { class Matrix { public: [...] friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; stream, const Matrix&amp; matrix); } } そして「実装」: using namespace Math; std::ostream&amp; Matrix::operator &lt;&lt;(std::ostream&amp; stream, const Matrix&amp; matrix) { [...] } これはコンパイラーによって与えられたエラーです: matrix.cpp:459:エラー: 'std :: ostream&Math :: Matrix :: operator &lt;&lt;(std :: …

11
数値をバイナリ形式で(coutを使用して)印刷する方法は?
私はオペレーティングシステムに関する大学のコースをフォローしており、バイナリから16進数、10進数から16進数などに変換する方法を学習しています。今日は、2の補数(〜number + 1)。 紙で行う演習が2つあります。課題を教師に提出する前に、回答を確認できるようにしたいと思います。最初の数回の演習用にC ++プログラムを作成しましたが、次の問題で自分の答えを確認する方法がわからなくなりました。 char a, b; short c; a = -58; c = -315; b = a &gt;&gt; 3; 我々はバイナリ表現を示すために必要なメモリ内のをa、bとc。 私はそれを紙の上で行いました、そしてそれは私に次の結果を与えます(2の補数の後の数の記憶のすべてのバイナリ表現): a = 00111010(これは文字なので、1バイトです) b = 00001000(これは文字なので、1バイトです) c = 11111110 11000101(短いので2バイト) 私の答えを確認する方法はありますか?C ++で数値のメモリにバイナリ表現を表示する標準的な方法はありますか、または各ステップを自分でコーディングする必要がありますか(2の補数を計算してからバイナリに変換します)?後者はそれほど長くはかからないでしょうが、標準的な方法があるかどうか知りたいです。

4
C ++標準では、iostreamのパフォーマンスの低下が義務付けられていますか?それとも、貧弱な実装を扱っているだけですか?
C ++標準ライブラリのiostreamのパフォーマンスが遅いことに言及するたびに、信じられないような波に遭遇します。それでも、iostreamライブラリコード(コンパイラの完全な最適化)に費やされた大量の時間を示すプロファイラー結果があり、iostreamからOS固有のI / O APIおよびカスタムバッファー管理に切り替えると、桁違いに改善されます。 C ++標準ライブラリはどのような追加の作業を行っていますか、それは標準で必要とされていますか、それは実際に役立ちますか?あるいは、一部のコンパイラーは、手動バッファー管理と競合するiostreamの実装を提供していますか? ベンチマーク 問題を解決するために、iostreamの内部バッファリングを実行する短いプログラムをいくつか作成しました。 バイナリデータをostringstream http://ideone.com/2PPYwに配置する バイナリデータをchar[]バッファに入れるhttp://ideone.com/Ni5ct http://ideone.com/Mj2Fivector&lt;char&gt;を使用してバイナリデータをback_inserter NEW:vector&lt;char&gt;シンプルなイテレーターhttp://ideone.com/9iitv NEW:バイナリデータをhttp://ideone.com/qc9QAに直接配置stringbuf NEW:vector&lt;char&gt;単純なイテレーターと境界チェックhttp://ideone.com/YyrKy ostringstreamとstringbufバージョンは、実行速度が非常に遅いため、実行される反復が少ないことに注意してください。 ideoneに、ostringstreamよりも約3倍遅いstd:copy+ back_inserter+ std::vector、および約15倍より遅いmemcpy生バッファへ。これは、実際のアプリケーションをカスタムバッファリングに切り替えたときのプロファイリング前後のプロファイルと一致しています。 これらはすべてメモリ内バッファーであるため、iostreamの速度が遅いディスクI / O、過度のフラッシュ、stdioとの同期、またはC ++標準ライブラリーの観察された速度の遅さを弁解するために使用するその他のものに起因するものではありません。 iostream。 他のシステムのベンチマークや、一般的な実装(gccのlibc ++、Visual C ++、Intel C ++など)が行うこと、および標準によってどの程度のオーバーヘッドが義務付けられているかについての解説を見るとよいでしょう。 このテストの根拠 多くの人々は、フォーマットされた出力にはiostreamがより一般的に使用されていると正しく指摘しています。ただし、これらは、バイナリファイルアクセス用のC ++標準によって提供される唯一の最新のAPIでもあります。しかし、内部バッファリングでパフォーマンステストを実行する本当の理由は、一般的なフォーマット済みI / Oに当てはまります:iostreamがディスクコントローラーにrawデータを供給できない場合、フォーマットを担当しているときに、どのようにして対応できるでしょうか? ベンチマークのタイミング これらはすべて、外側の(k)ループの反復ごとです。 ideone(gcc-4.3.4、不明なOSおよびハードウェア): ostringstream:53ミリ秒 stringbuf:27ミリ秒 vector&lt;char&gt;およびback_inserter:17.6ミリ秒 vector&lt;char&gt; 通常のイテレータの場合:10.6 ms vector&lt;char&gt; イテレータと境界チェック:11.4 ms char[]:3.7ミリ秒 私のラップトップ(Visual …

15
ストリームの概念を説明できますか?
ストリームは一連のバイトの表現であることを理解しています。各ストリームは、指定されたバッキングストアに対してバイトを読み書きする手段を提供します。しかし、ストリームのポイントは何ですか?なぜ私たちがやり取りしているのは、バッキングストア自体ではないのですか? どんな理由であれ、このコンセプトは私のためにクリックするだけではありません。たくさんの記事を読みましたが、類推か何かが必要だと思います。

11
誰がC ++のIOStreamsを設計/設計しましたか?それでも、今日の標準では十分に設計されていると見なされますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する まず第一に、私は主観的な意見を求めているように見えるかもしれませんが、それは私が求めているものではありません。このトピックに関する根拠のある議論を聞いてみたいです。 最近のストリーム/シリアライゼーションフレームワークがどのように設計されるべきかについて洞察を得ることを期待して、私は最近、Angelika LangerとKlaus Kreftによる本「Standard C ++ IOStreams and Locales」のコピーを手に入れました。私は、IOStreamsが適切に設計されていなければ、そもそもC ++標準ライブラリに組み込まれていないと考えました。 この本のさまざまな部分を読んだ後、IOStreamsが全体的なアーキテクチャの観点からのSTLなどと比較できるかどうか疑問になり始めています。たとえば、アレクサンダーステパノフ(STLの「発明者」)とのこのインタビューを読んで、STLに入った設計上の決定について学びます。 特に私を驚かせるもの: IOStreamsの全体的な設計の責任者は誰なのかは不明のようです(これについての背景情報をいくつか読みたいと思います。誰かが良いリソースを知っていますか?)。 あなたは、あなたがあなた自身のクラスとの入出力ストリームを拡張したい場合、あなたはかなり不可解とメンバ関数名を混乱とのインタフェースを取得入出力ストリームの直接の表面、例えば下に掘り下げ例えば一度getloc/ imbue、uflow/ underflow、snextc/ sbumpc/ sgetc/ sgetn、pbase/ pptr/ epptr(とそこのおそらくさらに悪い例)。これにより、全体的な設計と単一の部品がどのように連携するかを理解することが非常に難しくなります。私は上記でさえ本は助けにならないことくらい(私見)。 したがって、私の質問: あなたは(実際には存在している場合、今日のソフトウェアエンジニアリングの基準で判断しなければならなかった場合であるこれらの任意の一般的な合意が)、うC ++の入出力ストリームは、まだうまく設計されたとみなされますか?(ソフトウェアの設計スキルを、一般的に古いと考えられているものから改善したくありません。)
127 c++  iostream 

7
操作後にstd :: coutの状態を復元する
次のようなコードがあるとします。 void printHex(std::ostream&amp; x){ x&lt;&lt;std::hex&lt;&lt;123; } .. int main(){ std::cout&lt;&lt;100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout&lt;&lt;73; //problem! prints 73 in hex.. } 私の質問はcout、関数から戻った後に状態を元の状態に「復元」する方法があるかどうかです。(やや好きstd::boolalphaでstd::noboolalpha..)? ありがとう。
105 c++  iostream 

3
std :: getline()がフォーマットされた抽出後に入力をスキップするのはなぜですか?
ユーザーに名前と状態の入力を求める次のコードがあります。 #include &lt;iostream&gt; #include &lt;string&gt; int main() { std::string name; std::string state; if (std::cin &gt;&gt; name &amp;&amp; std::getline(std::cin, state)) { std::cout &lt;&lt; "Your name is " &lt;&lt; name &lt;&lt; " and you live in " &lt;&lt; state; } } 私が見つけたのは、名前は正常に抽出されたが、州は抽出されなかったということです。これが入力と結果の出力です。 Input: "John" "New Hampshire" Output: "Your name is John and …
105 c++  input  iostream  istream  c++-faq 

8
c ++のiostreamヘッダーのcout、cerr、clogの違いは何ですか?いつ使用するのですか?
私は違いを研究しようとしたcout、cerrおよびclogインターネット上ではなく、完璧な答えを見つけることができませんでした。どちらを使用するかはまだ明確ではありません。誰でも簡単なプログラムを通して私に説明でき、どのプログラムをいつ使うべきかについての完璧な状況を説明できますか? 私が訪れたこのサイト上の小さなプログラムを示しcerrそしてclog、そこの上に得られた出力にも使用して得ることができますcout。だから、私はそれぞれの正確な使い方に戸惑っています。
97 c++  iostream  cout  clog 

4
演算子<<は引数を1つだけ取る必要があります
ああ #include "logic.h" ... class A { friend ostream&amp; operator&lt;&lt;(ostream&amp;, A&amp;); ... }; logic.cpp #include "a.h" ... ostream&amp; logic::operator&lt;&lt;(ostream&amp; os, A&amp; a) { ... } ... 私がコンパイルすると、それは言う: std :: ostream&logic :: operator &lt;&lt;(std :: ostream&、A&) 'は引数を1つだけ取る必要があります。 何が問題ですか?

7
行ごとまたはテキストファイル全体を一度に読み取る方法は?
私はファイルを紹介するチュートリアルにいます(ファイルからの読み取りとファイルへの書き込みの方法) まず第一に、これは宿題ではありません。これは私が求めている一般的な助けにすぎません。 一度に1単語ずつ読む方法は知っていますが、一度に1行ずつ読む方法や、テキストファイル全体を読む方法がわかりません。 ファイルに1000語が含まれている場合はどうなりますか?各単語を読むことは実用的ではありません。 (読み取り)という名前のテキストファイルには、次のものが含まれています。 私はゲームをするのが大好きです読書が大好きです私は2冊の本を持っています これは私がこれまでに達成したことです: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main (){ ifstream inFile; inFile.open("Read.txt"); inFile &gt;&gt; 各行または各単語を別々に読み取る代わりに、ファイル全体を一度に読み取る方法はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.