[英]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.