簡體   English   中英

getline 與 istream_iterator

[英]getline vs istream_iterator

如果您正在從文件進行逐行輸入(將行讀入字符串,以進行標記化),是否有理由優先使用 getline 或 istream_iterator 。

我有時(根據情況)寫一個行類,以便我可以使用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::istream_iterator<Line>(std::cin),
                                       std::istream_iterator<Line>());
}

getline將為您提供整行,而istream_iterator<std::string>將為您提供單個單詞(以空格分隔)。

取決於您要完成的任務,如果您要問哪個更好(標記化只是一點點,例如,如果您期待一個格式良好的程序並且您希望解釋它,那么閱讀整行可能會更好.. .)

@Martin York 的答案——雖然有效——但在與 STL 算法一起使用時在許多領域都失敗了。 一個更簡單的解決方案是使用繼承。

struct line : public std::string{
    using std::string::string;
};

std::istream& operator>>(std::istream& s, line& l){
    std::getline(s, l);
    return s;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM