[src] 用 istream_iterator 讀進所有輸入行至 …
一般我們要讀進輸入行的每一行至 vector 中,都是用
string line;
vector<string> vs;
while (getline(cin, line))
vs.push_back(line);
以下是用 istream_iterator 的另類寫法:
// get all lines into vector from istream using iterator
// by KhoGuan Phuann
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
class Line {
string line_;
public:
const string& line() const { return line_; }
string& line() { return line_; }
};
inline istream& operator>> (istream& is, Line& line)
{
return getline(cin,line.line());
}
inline ostream& operator<< (ostream& os, const Line& line)
{
return os << line.line();
}
typedef istream_iterator<Line> isit_line;
typedef ostream_iterator<Line> osit_line;
// 以上的 class/function/typedef 定義可寫入 .h 檔中,方便以後再使用
int main()
{
// 要用時,就用這樣一行
vector<Line> all((isit_line(cin)),isit_line());
// 測試從最後一行開始印,也是一行碼
copy(all.rbegin(), all.rend(), osit_line(cout, "\n"));
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.166
※ 編輯: khoguan 來自: 220.130.208.166 (06/14 11:04)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章