可以從輸入流中讀取一行並將其傳遞給字符串流,而不使用C++中的臨時字符串變量?從istream讀取1行到C++中沒有臨時變量的字符串流?
我目前做這樣的讀數(但我不喜歡臨時變量line
):
string line;
getline(in, line); // in is input stream
stringstream str;
str << line;
可以從輸入流中讀取一行並將其傳遞給字符串流,而不使用C++中的臨時字符串變量?從istream讀取1行到C++中沒有臨時變量的字符串流?
我目前做這樣的讀數(但我不喜歡臨時變量line
):
string line;
getline(in, line); // in is input stream
stringstream str;
str << line;
像@Steve湯森上面說的,它可能不值得,但是如果你想做到這一點(和你事先就知道參與行數),你可以這樣做:
#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;
}
有以下問題的詳細信息(每@馬丁紐約)上閱讀從流直接串流。這不是一個直接的重複,因爲您希望逐行處理輸入,但這種方法難以提高效率。一旦原始數據位於字符串流中,就可以使用字符範圍實例化各個行。
How to read file content into istringstream?
說實話,這可能是這不是一個真正的巨大關注PERF反正有問題了很多工作。
你正在讀字,而不是行。無需事先了解行數,便可輕鬆測試流結束。只需使用void *運算符。 – Basilevs 2010-11-26 03:20:59