Biblioteca C ++ Iterator - istreambuf_iterator

Descrição

É um iterador de entrada especial que lê elementos sucessivos de um buffer de fluxo.

Declaração

A seguir está a declaração para std :: istreambuf_iterator.

C ++ 11

template <class charT, class traits = char_traits<charT> >
  class istreambuf_iterator;

Parâmetros

  • charT - É um tipo char.

  • traits - É um traço de caráter.

Valor de retorno

Nenhum

Exceções

Se x de alguma forma lançar ao aplicar o operador unário & a ele, esta função nunca lançará exceções.

Complexidade de tempo

constante para iteradores de acesso aleatório.

Exemplo

O exemplo a seguir mostra o uso de std :: istreambuf_iterator.

#include <vector>
#include <sstream>
#include <iostream>
#include <iterator>
 
int main() {

   std::istringstream in("Hello, world");
   std::vector<char> v( (std::istreambuf_iterator<char>(in)),
                         std::istreambuf_iterator<char>() );
   std::cout << "v has " << v.size() << " bytes. ";
   v.push_back('\0');
   std::cout << "it holds \"" << &v[0] << "\"\n";

   std::istringstream s("abc");
   std::istreambuf_iterator<char> i1(s), i2(s);
   std::cout << "i1 returns " << *i1 << '\n'
             << "i2 returns " << *i2 << '\n';
   ++i1;
   std::cout << "after incrementing i1, but not i2\n"
             << "i1 returns " << *i1 << '\n'
             << "i2 returns " << *i2 << '\n';
   ++i2;
   std::cout << "after incrementing i2, but not i1\n"
             << "i1 returns " << *i1 << '\n'
             << "i2 returns " << *i2 << '\n';
 
}

Vamos compilar e executar o programa acima, isso produzirá o seguinte resultado -

v has 12 bytes. it holds "Hello, world"
i1 returns a
i2 returns a
after incrementing i1, but not i2
i1 returns b
i2 returns a
after incrementing i2, but not i1
i1 returns b
i2 returns c