2009-11-13 65 views
1

如果您正在逐行輸入文件(將行讀取到字符串中進行標記化),是否應該有getline或gettream_iterator的理由。getline vs istream_iterator

+2

你自己那種回答了這個問題 - 使用'getline'獲得一條線或'istream_iterator'進行標記。 – 2009-11-13 15:24:21

回答

11

我有時會(視情況而定)寫了一行類,所以我可以用istream_iterator

#include <string> 
#include <vector> 
#include <iterator> 
#include <iostream> 
#include <algorithm> 

struct Line 
{ 
    std::string lineData; 

    operator std::string() const 
    { 
     return lineData; 
    } 
}; 
std::istream& operator>>(std::istream& str,Line& data) 
{ 
    std::getline(str,data.lineData); 
    return str; 
} 

int main() 
{ 
    std::vector<std::string> lines; 
    std::copy(std::istream_iterator<Line>(std::cin), 
       std::istream_iterator<Line>(), 
       std::back_inserter(lines) 
      ); 
} 
6

getline會讓你看到整行,而istream_iterator<std::string>會給你單獨的單詞(用空格分隔)。

取決於你想要完成什麼,如果你問哪一個更好(標記化只是一點,例如,如果你期待一個結構良好的程序,並且你期望解釋它,可能更好閱讀整個行...)

+0

對不起,我應該補充說,這行是逗號分隔的。所以istream_iterator 實際上會獲取整條線。 – Pradyot 2009-11-13 15:16:06

+0

如果您不希望輸入的內容格式錯誤_EVER_,這是一件很難說的事,是的,您會得到一整行。 – dirkgently 2009-11-13 15:33:48

+0

一行中的每個單元格也不得包含空格。 – 2009-11-13 18:29:28