問題タブ [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++ - std::copyを使用して任意の数の値を読み取る方法は?
私はこれと反対の行動をコード化しようとしています:
次のようになります。
しかし、私は 'end' イテレータに固執しています。入力インターレータは std::advance を使用できず、同じソースで 2 つのストリームを使用することもできません...
これを解決するエレガントな方法はありますか? もちろん、for ループを使用することもできますが、もっといいものがあるかもしれません :)
c++ - すでにストリームの最後にあるistream_iteratorをインクリメントした結果はどうなりますか?
私は標準を見ましたが、明白な答えは見当たりませんでした。
私がこれをしたとしましょう:
現在is
はストリームの最後にあり、に等しくなりstd::istream_iterator<char>()
ます。もう一度インクリメントするとどうなりますか?それはまだ等しいstd::istream_iterator<char>()
ですか?またはos結果は未定義ですか?
がストリームの最後にある*is
場合、標準はそれが未定義の動作であると明示的に述べています。is
しかし、ストリームの終わりを超えて反復することに関しては何も見ていません...
編集:
私はこのようなことをするいくつかのコードに出くわしたので尋ねます:
c++ - 文字列と istream_iterator を使用した C++ コンパイル エラー
以下をコンパイルしようとすると:
g++ 4.4.1 は私に与えます:
libstdc++ docsによると、string には begin/end イテレータのペアを取る ctor があります。では、なぜこのエラーが発生するのでしょうか?
c++ - getline 対 istream_iterator
ファイルから行ごとの入力を行う場合 (トークン化のために行を文字列に読み込む場合)、getline または istream_iterator のいずれかを優先する理由があるはずです。
c++ - istream_iteratorを使用して、標準の入力またはファイルから読み取る
私はMicrosoftVisualC ++で書いていますが、プログラムで標準の入力またはを使用してファイルから読み取るようにしたいと思いますistream_iterator
。インターネットをグーグルで検索しても、それがいかに簡単であるかはわかりません。したがって、たとえば、これを非常に簡単に記述して、標準の入力から読み取ることができます。
または、これを書き込んでファイルから読み取ることもできます。
しかし、これら2つを組み合わせて、簡単な(argc == 2)
チェックで入力ストリームイテレータをファイルストリームまたはstdinのいずれかで初期化し、楽しい方法で続行できるようにするにはどうすればよいですか?
c++ - 名前のない一時的な std::istream_iterator を作成できないのはなぜですか?
g++ を使用すると、ifstream インスタンスから istream_iterator を構築できます。
...しかし、名前のない一時的なもので同じ構築を行うことはできません:
これは与える:
エラー: 'std::istream_iterator, ptrdiff_t>::istream_iterator(std::ifstream)' の呼び出しに一致する関数がありません</p>
これが機能しない理由を誰かが知っていますか?- ありがとう!
c++ - istream からのコピーが止まらない
このコードは無限に実行されます。
私が期待していた動作は、Enter キーを押すと停止することです。
しかし、そうではありません。
buff は文字のベクトルです。
c++ - istream_iteratorがメモリリークしています
さて、あなたたちは私の最後の質問で非常に役に立ちました、それで私は別の質問を試みます。これも宿題で、最後のものはかなり古いものでしたが、提出されており、マークが付けられるのを待っています。ですから、私を噛むものがあれば、おそらくこの問題でしょう。(他の学生のために)課題を提出することはまだ可能であるため、私はクラス名などを難読化しました。
オブジェクトへのポインタのみをメンバーとするクラスがあります。このクラスは、現在保持しているポインター(Object *o_
基本クラス)からの特定の操作を公開するように構築されていますObject{1, 2, 3, ...}
。これで、メモリリークやクラッシュなしに、次のことができるようになりました。
これはすべて機能し、メモリリークはありません。しかし、ファイルから内容を読み込もうとすると、istream_iterator<ObjectPtr>
リークが発生し始めます。ObjectPtrは、動的メモリを処理する唯一のクラスであり、Object *o_
NULLに設定されるか、によって割り当てられObject{1, 2, 3, ...}
ます。
読み取るファイルは次のようになります
ObjectPtr
これらの値を読み取るために使用されるフレンド関数は、次のようになります。
ここのどこかでそれは私にユニコーンを始めます、そして私は本当に理由を知りたいです。
一言で言えば、istream_iteratorは、代入およびコピーコンストラクターが適切に機能しているときにメモリをリークします。これにより、クラスが正しく構築されていると信じられObject{1, 2, 3, 4, ..}
、問題は内にありますoperator>>
。
c++ - なぜistream_iteratorなのかstd :: bad_castをスローしますか?
何が起こっている?
stream.write(some_array, sizeof(some_array)
イテレータを作成する前に試しましたが、役に立ちませんでした。
ありがとう。
c++ - wistringstreamを使用してistring_iteratorをインスタンス化することはできません
このスレッドにあるメソッドを使用して文字列を分割しようとしていますが、それをwstringに適合させようとしています。しかし、私は奇妙なエラーに遭遇しました。コードを確認してください:
正確なエラーメッセージは次のとおりです。
iss
渡されたもの(istringstreamではなくwistringstream)を使用してistream_iteratorをインスタンス化できないと言っていると思います。これは、XCodeとGCC4.2を使用するMac上にあります。そして、AFAIKにはwistring_iteratorなどはありません。
wstring以外のバージョンを使用している場合は完全に機能します。ご覧のとおり、宣言を、、 s、およびを使用するように変更しwstring
、wistringstream
ワイドvector<wstring>
バージョンを使用するようにすべてを置き換えました。
これを引き起こす原因と、なぜwstring-versionを受け入れないのですか?