C++で一時文字列変数を使用せずに、入力ストリームから1行を読み取って文字列ストリームに渡すことは可能ですか?
私は現在、次のように読み取りを行っています(ただし、一時変数は好きではありませんline
):
string line;
getline(in, line); // in is input stream
stringstream str;
str << line;
C++で一時文字列変数を使用せずに、入力ストリームから1行を読み取って文字列ストリームに渡すことは可能ですか?
私は現在、次のように読み取りを行っています(ただし、一時変数は好きではありませんline
):
string line;
getline(in, line); // in is input stream
stringstream str;
str << line;
ストリームから文字列ストリームへの直接読み取りに関する詳細情報は、以下の質問 (@Martin York ごと) にあります。入力を 1 行ずつ処理する必要があるため、これは直接の複製ではありませんが、このアプローチは効率性に勝るものはありません。生データが文字列ストリームに入ったら、文字範囲を使用して個々の行をインスタンス化できます。
ファイルの内容を istringstream に読み込むには?
正直なところ、これは実際には大きなパフォーマンス上の問題ではない問題に対しては大変な作業になる可能性があります。
@Steve Townsendが上で言ったように、おそらく努力する価値はありませんが、これをやりたい場合(そして関連する行数を事前に知っていた場合)、次のようにすることができます:
#include <iostream>
#include <iterator>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;
template <typename _t, int _count>
struct ftor
{
ftor(istream& str) : _str(str), _c() {}
_t operator() ()
{
++_c;
if (_count > _c) return *(_str++); // need more
return *_str; // last one
}
istream_iterator<_t> _str;
int _c;
};
int main(void)
{
ostringstream sv;
generate_n(ostream_iterator<string>(sv, "\n"), 5, ftor<string, 5>(cin));
cout << sv.str();
return 0;
}