問題タブ [istream-iterator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 簡単な istream_iterator の質問
私は C++ を初めて使用します。これがばかげた質問である場合は申し訳ありません。なぜこれが機能しないのか理解できないようです。最初のベクトルにコピーし、2 番目のコピー呼び出しをスキップするようです。
copy 関数を使用して、 istream_iterator 入力を任意の数のベクトルに読み取りたい (ベクトルごとに 1 回呼び出してコピーする)。つまり、コンソールに「1 2 3 4 5 ctrl+d」と入力して、最初のベクトルに 1,2,3,4,5 を入力できるようにしたいと考えています。次に、コンソールに「6 7 8 9 10 ctrl+d」と入力し、2 番目のベクトルに 6,7,8,9,10 を入力します。
問題は、最初のベクトルに何らかの入力を入力して control+d を押した後、cin の失敗状態に関係なく、cin の istream_iterator が istream_iterator() と同じままであることです。これにより、以降のすべての「copy」呼び出しが失敗します (istream_iteratorcin は、プログラムが eof として解釈する istream_iterator() と既に等しいため)。私の質問は次のとおりです。cinストリームとともにイテレータを「リセット」するにはどうすればよいですか? cin.clear() は実際にすべての失敗ビットをクリアしています。ただし、 istream_iterator(cin) は istream_iterator() と同じです。私が理解していることから、ストリームにバインドされている istream_iterators は、ストリームが失敗状態にある場合にのみ、デフォルトの istream_iterator 値と等しくなければなりません。私は何が欠けていますか?
c++ - ifstream を使用したコピー アルゴリズム
次のコードは、期待どおりに動作していません。それがどのように機能するかを理解するのを手伝ってください。
私のカスタム operator>> は 2 回呼び出されますが、内容は次のとおりであるため、1 回だけ呼び出されると予想されます。
ジョン:40:21-5821-0
c++ - テンプレート使用時の奇妙なエラー文字列(InputIterator begin、InputIterator end);
そのようなコードセグメントが与えられた場合:
このコードは、istream_iteratorを使用してファイルから文字列を作成します。
文字列コンストラクターの最初のパラメーターが括弧のペアで囲まれていることに注意してください。かっこを省略するとエラーになります。VC ++ 2008では、リンクエラーが発生します。G ++では、コードの出力が間違っています。
かっこがとても不思議です。違いは何ですか、そしてその理由は何ですか?
c++ - istream_iterator の動作
私は 2 つのコードを持っていmain()
ます。
と
これら2つの部分が一緒に使用される場合、つまり
ここで最初の部分は機能しましたが、2番目の部分は出力を提供します: Enter Three Strings : , , ,
. この動作の背後にある理由は何ですか?
ありがとう。
c++ - Priority_queue と入力ストリーム イテレータ
ご覧のとおり、cin を優先キューに転送する学校のプロジェクトがあります。まあ、私は「ちょっとやった...私がしたことは、リストにistream_iteratorを入力することです
それからpriority_queueへ、これは長期的には非常に非効率的だと思います.だから、仲介者なしで直接cinをpriority_queueに転送する方法はありますか. 私はそれをやってみましたが、コピー機能ではpriority_queueを引数として持つことができません。c++ - 範囲がわからないのはなぜですか-std::istream_iteratorのbeginとendのオーバーロードを見つけるために?
私はこのようなコードを持っています
ここで、とは次std::istream_iterator<std::string>
の
ように定義されますbegin()
end()
これは、マーク・ネルソンがドブ博士のここにも書いていることです。残念ながら、コードはVisualStudio2012でコンパイルできずエラーメッセージが表示されます
エラーC3312:タイプ'std ::istream_iterator<_Ty>'に対して呼び出し可能な'begin'関数が見つかりません
と
エラーC3312:タイプ'std ::istream_iterator<_Ty>'に対して呼び出し可能な'end'関数が見つかりません
質問:私が気付いていないこと、コンパイラのバグ(ありそうもないが、念のため)、または...ええと、何かアイデアはありますか?
Xeo
のアドバイスに従って、この質問はかなりクリーンアップされます。より多くの背景と参照を提供するために、これはStackoverflowに関する他の質問に関連しています。私は、ラインベースの解析を通常のループよりもクリーンにする方法を考えていました。インターネットからのコーディングとチェックのビット、そして私は次のように作業スケッチを持っていました
しかし、私が改善しようとしたわずかな障害がありました。コンパイルに失敗し、好きではないコードのように書く方が自然に見えると思います
別のイテレータに注意してください。delimeter_tokensは、Nawazが親切にここに示したように(コードは複製されていません)、istream_rangeはコード合成ブログのように定義されています。前述のCodeSynthesisブログ投稿で宣伝されているように、開始と終了の実装は機能するはずです。
最後のルール(独立したbegin()およびend()関数へのフォールバック)により、既存のコンテナーを範囲ベースのforループインターフェイスに非侵襲的に適合させることができます。
したがって、すべての(無関係な)背景を持つ私の質問。
c++ - EOF を文字列として再定義する
一連の単語を取得し、それらをベクトルに入れて、それらを処理するプログラムを作成しようとしています。機能する1つの方法を見つけました。それは次のとおりです。
ただし、別の方法を使用してそれを実行しようとしています。
しかしQuit
、入力ストリームを終了して単語をベクトルに入れる平均的な EOF を作成する方法がわかりません。"Quit"
文字列をストリーム ターミネータとして機能させるにはどうすればよいですか?
c++ - istreambuf_iterator の事前処理が機能しないのはなぜですか
完全なファイルの内容を文字のベクトルに読み込むことに関するistream_iterators を使用したベクトルの構築を読んでいました。ファイルの一部を文字のベクトルにロードしたいのですが。
前述の質問の受け入れられた回答は機能しますが、事前は機能しないため、これは機能しません。事前に機能しないのはなぜistreambuf_iterator
ですか?
また
0 を返します。何が起こっているのか誰か説明してください!
c++ - istream_iteratorcinの初期化は入力を待機します
このコードスニペットがあります。istream_iteratorオブジェクトは定義されているだけで使用されていないため、何も実行されず、アプリケーションはすぐに終了することを期待しています。しかし、アプリケーションを実行すると、入力を提供する前にアプリケーションが終了しません。なんで?
ArchLinuxで次のコマンドを使用してコンパイルしています:gcc 4.7.1、コマンド:g ++ -std = c ++ 11 filename.cpp