繁体   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