問題タブ [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.

0 投票する
1 に答える
684 参照

c++ - istreambuf_iterator を使用して特定の長さを読み取る方法はありますか?

私は次のようにファイルを書いています:

std::istream_iterator当然のことながら、 orを使用して 5 バイトを読み取る同様の方法があるかどうか疑問に思っていましたが、std::istreambuf_iteratorサポートしていないため、operator+これを達成する方法がわかりません。

たとえば、これに近い解決策を想像しました。

C++14 でこれを行う方法はありますか?

PS: STL を使用したソリューションが必要なため、使用boostはオプションではありません。

0 投票する
1 に答える
16467 参照

c++ - C++ istream_iterator は std のメンバーではありません

コンパイル時に私が書いた以下のコードが不平を言い続ける理由を誰か教えてもらえistream_iterator is not a member of stdますか? みんなありがとう

そのため、問題を見つけた場合はお知らせください。現時点ではよくわかりません。必要なすべてのインクルード ライブラリを入れたと思います。

0 投票する
1 に答える
502 参照

c++ - C++ ファイルからのデータの読み取り (演習問題)

免責事項: この質問は、教科書のプログラミング演習に直接関係しています。

テキストブックから C++ プログラミング演習に取り組んでいますが、それを機能させる方法がわかりませんでした。誰かが私のコードのエラーを指摘できれば幸いです。ここで問題が発生します...

「istream_iterator、コピー アルゴリズム、および back_inserter を使用して、空白で区切られた int 値を含むテキスト ファイルの内容を読み取ります。int 値を int のベクトルに配置します。コピー アルゴリズムの最初の引数は、istream_iterator オブジェクトである必要があります。テキスト ファイルの ifstream オブジェクトに関連付けられています. 2 番目の引数は, クラス テンプレート istream_iterator のデフォルト コンストラクタを使用して初期化された istream_iterator オブジェクトである必要があります.結果のオブジェクトは "終了" イテレータとして使用できます. ファイルの内容を読み取った後, ファイルの内容を表示します.結果のベクトル。」

次のコードを作成しました。コードはコンパイルされますが、何もしません。

テキスト ファイルには、「12 23 43 34」が含まれています。

コードをデバッグしようとしたところ、改行ではなく空白で区切られているため、テキスト ファイルの値が int ベクトルに正しく読み込まれていないことに気付きました。

誰か助けてくれませんか?!

0 投票する
1 に答える
262 参照

c++ - istream_iteratorstd::endl を示す

ファイルに保存したい次のコンテナがあります。

Pointoperator<<()とが定義された基本構造operator>>()です。

ファイルの形式は次のとおりです。

ポイント要素は で区切られ','、ポイントは次のように区切られ' 'ます。

私はそのようなファイルを作成することができました:

そしてそれはうまくいきます。しかし、問題は読み方です。次のことを試すと:

すべてのラインのすべてのポイントが に読み込まれm_vPoints[0]ます。のように見えますがstd::istream_iterator<Point>()無視されstd::endlます。個々のポイントを区切る空白をスキップしたいので、使用is >> noskipwsは機能しません。基本的に、問題は istream からコピーすることですが、ストリームの終わりに達するまでではなく、行末までコピーすることです。ネットで見た例では、cinスペース文字を無視して、何とか 1 行を解析することができましたが、std::endlまたはで正しく終了しています。'\n'

getline()また、各行を文字列にコピーしてから文字列を解析する必要があるため、も避けたいと思います。i代わりに、行をコンテナに直接コピーしたいm_vPoints[i]

0 投票する
2 に答える
338 参照

c++ - istream_iterator から move_iterator を作成できますか?

次のコードを検討してください。

上記のコードは、次の行のためにコンパイルされません (!!!):

しかし、 andをそれぞれ (通常の反復子) および に置き換えるmstartと、コードはコンパイルされます。なぜ私は作ることができないのですか?meosstarteosmove_iterators

編集: なぜストリーム/文字列から文字を移動したいのか疑問に思っている人のために。char実際の問題には、文字列からのコピーを避けるべきよりも複雑なデータ型が含まれます。char簡単にするために、エラーの原因となるメカニズムを提示するために使用されました。

0 投票する
1 に答える
473 参照

c++ - constexpr エンド istream (センチネル) イテレータのポイントは何ですか?

N2976constexprは、標準ライブラリのいくつかの場所に追加することを提案しました。s はEXCEPT 終了イテレータiostreamには不適切であることに注意してください。constexprそれでistream_iterator、デフォルトのコンストラクタistreambuf_iteratorが与えられました。それはそれについてです。constexprたとえば、ファイル全体で 1 回だけ表示されるlibstdc++ 実装で確認できます。constexprこの変更のきっかけとなった LWG は#1129でした。それは言います:

istream_iteratoristreambuf_iteratorリテラルのセンチネル値をサポートする必要があります。デフォルトのコンストラクターは、範囲を終了するために頻繁に使用され、値の型を反復するときにistreambuf_iterator、のリテラル値になりがち です。istream_iterator【残り略】

これは私にはあまり意味がありません。誰かが彼らの意味の例を見せてもらえますか?

N3308は、この問題について言及しているが説明していない別の論文です。

がリテラル型であるistream_iterator<T>必要が あるコンストラクターconstexprもあります。Tその意図は、インラインのタイプを格納する既存の実装手法がT引き続き機能するようにすることです。[libstdc++ はこれを行う_Tp _M_value] ただし、実際にはこの手法を除外しています。 のデフォルト コンストラクターとコピー コンストラクターをTマークする必要はありconstexprませ istream_iterator<T>constexpr

上記は自明なコピー コンストラクターとデストラクタを説明していますが、既定のコンストラクターが constexpr とマークされている理由は説明していません。

さらに、オンライン GCC 5.2.0 でテストして、libstdc++ の実装をコピーしました。唯一の変更点は、constexpr を から削除したことistream_iterator()です。どちらの場合も、アセンブリは同じです。

constexpr を使用

constexpr なし

0 投票する
2 に答える
3364 参照

c++ - バイナリ ファイル内のバイトを反復処理する istream_iterator

次の 16 進コードを含むファイルがあるとします: 0B 00 00 00 00 00 20 41

std::vector <std::uint8_t>にデータを入力してから、各バイトを手動でチェックしようとしています。

これは、反復子コンストラクターを使用して 2 つの std::istream_iterators からベクターを作成するコードです。

これが私が通過しようとしている単体テストです:

このコンテキストで、2 つの要素をスキップし、std::uint8_t のベクトルを暗黙的に unsigned char に変換するのはなぜですか?

0 投票する
1 に答える
590 参照

c++ - コンストラクタ std::istream_iterator のインスタンスなし

次の問題があります。クラスのファイル コンストラクターを作成したいと考えています。私はstd::copyアルゴリズムを使用していますが、この種のエラーが発生します:

これが私のコンストラクタです: