如果您正在从文件中逐行输入(将行读入字符串,用于标记化),是否有理由优先使用 getline 或 istream_iterator。
问问题
3512 次
3 回答
15
我有时(视情况而定)写一个线类,这样我就可以使用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>());
}
于 2009-11-13T18:26:30.083 回答
6
getline
会给你整行,而istream_iterator<std::string>
会给你单个单词(用空格分隔)。
取决于您要完成的工作,如果您要问哪个更好(标记化只是一点点,例如,如果您期望一个格式良好的程序并且您希望对其进行解释,那么阅读整行可能会更好.. .)
于 2009-11-13T15:12:47.557 回答
0
@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;
}
于 2021-04-22T02:07:10.913 回答