使用istream_iterator读取多行字符串

Using an istream_iterator to read strings in multiple lines

本文关键字:字符串 读取 iterator istream 使用      更新时间:2023-10-16

我想读取以下输入:

Foo 1 2 4 
Bar 3 4 5

作为两个独立的"string"对象

是否可以使用istream_iterator来实现?

我在哪里可以找到关于所有这些迭代器的好的文档?

您需要使用getline(): http://www.cplusplus.com/reference/iostream/istream/getline/

这正是你想要的。

我认为您不需要特别使用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"));
}


EDIT:我错过了第二个问题:"我在哪里可以找到所有这些迭代器的良好文档?"我个人觉得http://cplusplus.com/reference/std/iterator/很有用