問題タブ [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++ - istreambuf_iterator を使用して特定の長さを読み取る方法はありますか?
私は次のようにファイルを書いています:
std::istream_iterator
当然のことながら、 orを使用して 5 バイトを読み取る同様の方法があるかどうか疑問に思っていましたが、std::istreambuf_iterator
サポートしていないため、operator+
これを達成する方法がわかりません。
たとえば、これに近い解決策を想像しました。
C++14 でこれを行う方法はありますか?
PS: STL を使用したソリューションが必要なため、使用boost
はオプションではありません。
c++ - C++ istream_iterator は std のメンバーではありません
コンパイル時に私が書いた以下のコードが不平を言い続ける理由を誰か教えてもらえistream_iterator is not a member of std
ますか? みんなありがとう
そのため、問題を見つけた場合はお知らせください。現時点ではよくわかりません。必要なすべてのインクルード ライブラリを入れたと思います。
c++ - C++ ファイルからのデータの読み取り (演習問題)
免責事項: この質問は、教科書のプログラミング演習に直接関係しています。
テキストブックから C++ プログラミング演習に取り組んでいますが、それを機能させる方法がわかりませんでした。誰かが私のコードのエラーを指摘できれば幸いです。ここで問題が発生します...
「istream_iterator、コピー アルゴリズム、および back_inserter を使用して、空白で区切られた int 値を含むテキスト ファイルの内容を読み取ります。int 値を int のベクトルに配置します。コピー アルゴリズムの最初の引数は、istream_iterator オブジェクトである必要があります。テキスト ファイルの ifstream オブジェクトに関連付けられています. 2 番目の引数は, クラス テンプレート istream_iterator のデフォルト コンストラクタを使用して初期化された istream_iterator オブジェクトである必要があります.結果のオブジェクトは "終了" イテレータとして使用できます. ファイルの内容を読み取った後, ファイルの内容を表示します.結果のベクトル。」
次のコードを作成しました。コードはコンパイルされますが、何もしません。
テキスト ファイルには、「12 23 43 34」が含まれています。
コードをデバッグしようとしたところ、改行ではなく空白で区切られているため、テキスト ファイルの値が int ベクトルに正しく読み込まれていないことに気付きました。
誰か助けてくれませんか?!
c++ - istream_iteratorstd::endl を示す
ファイルに保存したい次のコンテナがあります。
Point
operator<<()
とが定義された基本構造operator>>()
です。
ファイルの形式は次のとおりです。
ポイント要素は で区切られ','
、ポイントは次のように区切られ' '
ます。
私はそのようなファイルを作成することができました:
そしてそれはうまくいきます。しかし、問題は読み方です。次のことを試すと:
すべてのラインのすべてのポイントが に読み込まれm_vPoints[0]
ます。のように見えますがstd::istream_iterator<Point>()
無視されstd::endl
ます。個々のポイントを区切る空白をスキップしたいので、使用is >> noskipws
は機能しません。基本的に、問題は istream からコピーすることですが、ストリームの終わりに達するまでではなく、行末までコピーすることです。ネットで見た例では、cin
スペース文字を無視して、何とか 1 行を解析することができましたが、std::endl
またはで正しく終了しています。'\n'
getline()
また、各行を文字列にコピーしてから文字列を解析する必要があるため、も避けたいと思います。i
代わりに、行をコンテナに直接コピーしたいm_vPoints[i]
c++ - istream_iterator から move_iterator を作成できますか?
次のコードを検討してください。
上記のコードは、次の行のためにコンパイルされません (!!!):
しかし、 andをそれぞれ (通常の反復子) および に置き換えるmstart
と、コードはコンパイルされます。なぜ私は作ることができないのですか?meos
start
eos
move_iterators
編集:
なぜストリーム/文字列から文字を移動したいのか疑問に思っている人のために。char
実際の問題には、文字列からのコピーを避けるべきよりも複雑なデータ型が含まれます。char
簡単にするために、エラーの原因となるメカニズムを提示するために使用されました。
c++ - constexpr エンド istream (センチネル) イテレータのポイントは何ですか?
N2976constexpr
は、標準ライブラリのいくつかの場所に追加することを提案しました。s はEXCEPT 終了イテレータiostream
には不適切であることに注意してください。constexpr
それでistream_iterator
、デフォルトのコンストラクタistreambuf_iterator
が与えられました。それはそれについてです。constexpr
たとえば、ファイル全体で 1 回だけ表示されるlibstdc++ 実装で確認できます。constexpr
この変更のきっかけとなった LWG は#1129でした。それは言います:
istream_iterator
istreambuf_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()
です。どちらの場合も、アセンブリは同じです。
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 に変換するのはなぜですか?
c++ - コンストラクタ std::istream_iterator のインスタンスなし
次の問題があります。クラスのファイル コンストラクターを作成したいと考えています。私はstd::copy
アルゴリズムを使用していますが、この種のエラーが発生します:
これが私のコンストラクタです: