我想阅读以下内容:
Foo 1 2 4
Bar 3 4 5
作为两个单独的“字符串”对象。
是否可以使用istream_iterator完成此操作?
我在哪里可以找到所有这些迭代器的好文档?
答案 0 :(得分:3)
您需要使用getline():http://www.cplusplus.com/reference/iostream/istream/getline/
事实是,这正是你想要的。
答案 1 :(得分:2)
我认为你不需要专门使用std::istream_iterator
,因为它不会做你想要的。不同的迭代器会对你有用吗?
#include <iterator>
#include <iostream>
class getline_iterator
: public std::iterator<std::input_iterator_tag, std::string>
{
private:
std::istream* is;
std::string line;
void fetchline() {
if (is && !std::getline(*is, line)) is = 0;
}
public:
getline_iterator(std::istream& is) : is(&is) {
fetchline();
}
getline_iterator() : is(0) { }
std::string operator*() {
return line;
}
getline_iterator& operator++() {
fetchline();
return *this;
}
bool operator==(const getline_iterator& rhs) const {
return (!rhs.is) == (!is);
}
bool operator!=(const getline_iterator& rhs) const {
return !(rhs == *this);
}
};
int main()
{
getline_iterator begin(std::cin);
getline_iterator end;
std::copy(begin, end, std::ostream_iterator<std::string>(std::cout, "\n"));
}
<小时/> 编辑:我错过了第二个问题:“我在哪里可以找到所有这些迭代器的好文档?”我个人认为http://cplusplus.com/reference/std/iterator/很有用。