最終更新日時:
が更新

履歴 編集

class template
<iterator>

std::istreambuf_iterator

namespace std {
  template <class CharT, class Traits = char_traits<CharT> >
  class istreambuf_iterator
    : public iterator<input_iterator_tag, CharT, typename Traits::off_type, unspecified, CharT>
}

概要

istreambuf_iteratorは、operator++()でイテレータを進めることにより、ストリームバッファのsbumpc()メンバ関数でストリームからデータを読み込む入力イテレータである。

ストリームからのsgetc()メンバ関数による読み取りがTraits::eof()を返した場合に、イテレータはendイテレータと等しくなる。

istream_iteratorとは異なり、スペースや改行が読み飛ばされることはない。いくつかのメンバ関数は、同じstreambufオブジェクトを参照するためにプロキシオブジェクトを返す。

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ
~istreambuf_iterator() = default デストラクタ
operator* 間接参照
operator-> メンバアクセス C++11
operator++ イテレータをインクリメントする
equal istreambuf_iteratorオブジェクトの等値比較

メンバ型

名前 説明 対応バージョン
char_type CharT
traits_type Traits (デフォルトはchar_traits<CharT>)
int_type Traits::int_type
streambuf_type basic_streambuf<CharT, Traits>
istream_type basic_istream<CharT, Traits>
difference_type Traits::off_type
pointer 未規定
value_type CharT
iterator_category input_iterator_tag
reference CharT

非メンバ関数

名前 説明 対応バージョン
operator== 等値比較
operator!= 非等値比較

#include <iostream>
#include <iterator>
#include <sstream>
#include <algorithm> // for_each

int main()
{
  std::stringstream ss;
  ss << "1 2 3" << std::endl
     << "4 5 6";

  // 文字列の入力ストリームから順に文字を読み込むイテレータを用意
  std::istreambuf_iterator<char> it(ss);
  std::istreambuf_iterator<char> last;

  // イテレータを進めることにより、入力ストリームからデータを順に読み取る
  std::for_each(it, last, [](char c) { std::cout << c; });
}

出力

1 2 3
4 5 6

関連項目