Поделиться через


Класс istreambuf_iterator

Шаблон класса istreambuf_iterator описывает объект входного итератора, который извлекает элементы символов из буфера входного потока, к которому он обращается через объект, который он хранит, указателя типа на basic_streambuf<CharType, Traits.>

Синтаксис

template <class CharType class Traits = char_traits <CharType>>
class istreambuf_iterator
: public iterator<input_iterator_tag, CharType, typename Traits ::off_type, CharType*, CharType&>

Параметры

CharType
Тип, представляющий тип символа для istreambuf_iterator.

Признаки
Тип, представляющий тип символа для istreambuf_iterator. Этот аргумент является необязательным, а значение по умолчанию — char_traits<CharType.>

Замечания

Класс istreambuf_iterator должен удовлетворять требованиям для итератора ввода.

После создания или приращения объекта класса istreambuf_iterator с помощью сохраненного указателя, не содержащего null, объект фактически пытается извлечь и сохранить объект типа CharType из соответствующего входного потока. Извлечение может быть отложено, однако до тех пор, пока объект не будет удален или скопирован. Если извлечение завершается ошибкой, этот объект фактически заменяет сохраненный указатель указателем null, тем самым создавая индикатор конца последовательности.

Конструкторы

Конструктор Description
istreambuf_iterator Создает объект istreambuf_iterator, инициализируемый для чтения символов из входного потока.

Определения типов

Введите имя Description
char_type Тип, обеспечивающий тип символа для ostreambuf_iterator.
int_type Тип, предоставляющий целочисленный тип для istreambuf_iterator.
istream_type Тип, обеспечивающий тип потока для istream_iterator.
streambuf_type Тип, обеспечивающий тип потока для istreambuf_iterator.
traits_type Тип, обеспечивающий тип признаков символа для istream_iterator.

Функции элементов

Функция-член Description
equal Тесты на равенство между двумя итераторами буфера входного потока.

Операторы

Operator Description
operator* Оператор удаления ссылки возвращает следующий символ в потоке.
оператор++ Либо возвращает следующий символ из входного потока, либо копирует объект перед его увеличением и возвращает копию.

Требования

Заголовок:<итератор>

Пространство имен: std

istreambuf_iterator::char_type

Тип, обеспечивающий тип символа для ostreambuf_iterator.

typedef CharType char_type;

Замечания

Тип является синонимом для параметра-шаблона CharType.

Пример

// istreambuf_iterator_char_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
#include <algorithm>

int main( )
{
   using namespace std;

   typedef istreambuf_iterator<char>::char_type CHT1;
   typedef istreambuf_iterator<char>::traits_type CHTR1;

   cout << "(Try the example: 'So many dots to be done'\n"
        << " then an Enter key to insert into the output,\n"
        << " & use a ctrl-Z Enter key combination to exit): ";

   // istreambuf_iterator for input stream
   istreambuf_iterator< CHT1, CHTR1> charInBuf ( cin );
   ostreambuf_iterator<char> charOut ( cout );

   // Used in conjunction with replace_copy algorithm
   // to insert into output stream and replace spaces
   // with dot-separators
   replace_copy ( charInBuf , istreambuf_iterator<char>( ),
        charOut , ' ' , '.' );
}

istreambuf_iterator::equal

Тесты на равенство между двумя итераторами буфера входного потока.

bool equal(const istreambuf_iterator<CharType, Traits>& right) const;

Параметры

right
Итератор, для которого выполняется проверка на равенство.

Возвращаемое значение

true Значение , если оба istreambuf_iterators являются итераторами конца потока или если ни является конечным итератором потока; в противном случае false.

Замечания

Диапазон определяется istreambuf_iterator текущей позицией и итератором конца потока, но так как все неконечные итераторы потока эквивалентны функции-члена equal , невозможно определить какие-либо подранги с помощью istreambuf_iterators. Операторы == и != имеют одинаковую семантику.

Пример

// istreambuf_iterator_equal.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "(Try the example: 'Hello world!'\n"
        << " then an Enter key to insert into the output,\n"
        << " & use a ctrl-Z Enter key combination to exit): ";

   istreambuf_iterator<char> charReadIn1 ( cin );
   istreambuf_iterator<char> charReadIn2 ( cin );

   bool b1 = charReadIn1.equal ( charReadIn2 );

   if (b1)
      cout << "The iterators are equal." << endl;
   else
      cout << "The iterators are not equal." << endl;
}

istreambuf_iterator::int_type

Тип, предоставляющий целочисленный тип для istreambuf_iterator.

typedef typename traits_type::int_type int_type;

Замечания

Тип является синонимом Traits::int_type.

Пример

// istreambuf_iterator_int_type.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>

int main( )
{
   using namespace std;
   istreambuf_iterator<char>::int_type inttype1 = 100;
   cout << "The inttype1 = " << inttype1 << "." << endl;
}
/* Output:
The inttype1 = 100.
*/

istreambuf_iterator::istream_type

Тип, обеспечивающий тип потока для istreambuf_iterator.

typedef basic_istream<CharType, Traits> istream_type;

Замечания

Тип является синонимом basic_istream<CharType, Traits.>

Пример

См. раздел istreambuf_iterator с примером объявления и использования istream_type.

istreambuf_iterator::istreambuf_iterator

Создает istreambuf_iterator, инициализируемый для чтения символов из входного потока.

istreambuf_iterator(streambuf_type* strbuf = 0) throw();
istreambuf_iterator(istream_type& _Istr) throw();

Параметры

strbuf
Буфер входного потока, к которому присоединяется istreambuf_iterator.

_Istr
Входной поток, к которому присоединяется istreambuf_iterator.

Замечания

Первый конструктор инициализирует указатель входного потока-буфера с помощью strbuf. Второй конструктор инициализирует указатель входного потока-буфера с помощью _Istr. rdbuf, а затем в конечном итоге пытается извлечь и сохранить объект типа CharType.

Пример

// istreambuf_iterator_istreambuf_iterator.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <algorithm>
#include <iostream>

int main( )
{
   using namespace std;

   // Following declarations will not compile:
   istreambuf_iterator<char>::istream_type &istrm = cin;
   istreambuf_iterator<char>::streambuf_type *strmbf = cin.rdbuf( );

   cout << "(Try the example: 'Oh what a world!'\n"
      << " then an Enter key to insert into the output,\n"
      << " & use a ctrl-Z Enter key combination to exit): ";
   istreambuf_iterator<char> charReadIn ( cin );
   ostreambuf_iterator<char> charOut ( cout );

   // Used in conjunction with replace_copy algorithm
   // to insert into output stream and replace spaces
   // with hyphen-separators
   replace_copy ( charReadIn , istreambuf_iterator<char>( ),
      charOut , ' ' , '-' );
}

istreambuf_iterator::operator*

Оператор удаления ссылки возвращает следующий символ в потоке.

CharType operator*() const;

Возвращаемое значение

Следующий символ в потоке.

Пример

// istreambuf_iterator_operator_deref.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Type string of characters & enter to output it,\n"
      << " with stream buffer iterators,(try: 'I'll be back.')\n"
      << " repeat as many times as desired,\n"
      << " then keystroke ctrl-Z Enter to exit program: ";
   istreambuf_iterator<char> inpos ( cin );
   istreambuf_iterator<char> endpos;
   ostreambuf_iterator<char> outpos ( cout );
   while ( inpos != endpos )
   {
*outpos = *inpos;   //Put value of outpos equal to inpos
      ++inpos;
      ++outpos;
   }
}

istreambuf_iterator::operator++

Либо возвращает следующий символ из входного потока, либо копирует объект перед его увеличением и возвращает копию.

istreambuf_iterator<CharType, Traits>& operator++();
istreambuf_iterator<CharType, Traits> operator++(int);

Возвращаемое значение

istreambuf_iterator или ссылка на istreambuf_iterator.

Замечания

Первый оператор в конечном итоге пытается извлечь и сохранить объект типа CharType из связанного входного потока. Второй оператор создает копию объекта, выполняет приращение объекта, а затем возвращает копию.

Пример

// istreambuf_iterator_operator_incr.cpp
// compile with: /EHsc
#include <iterator>
#include <iostream>

int main( )
{
   using namespace std;

   cout << "Type string of characters & enter to output it,\n"
      << " with stream buffer iterators,(try: 'I'll be back.')\n"
      << " repeat as many times as desired,\n"
      << " then keystroke ctrl-Z Enter to exit program: ";
   istreambuf_iterator<char> inpos ( cin );
   istreambuf_iterator<char> endpos;
   ostreambuf_iterator<char> outpos ( cout );
   while ( inpos != endpos )
   {
*outpos = *inpos;
      ++inpos;   //Increment istreambuf_iterator
      ++outpos;
   }
}

istreambuf_iterator::streambuf_type

Тип, обеспечивающий тип потока для istreambuf_iterator.

typedef basic_streambuf<CharType, Traits> streambuf_type;

Замечания

Тип является синонимом basic_streambuf<CharType, Traits.>

Пример

См. раздел istreambuf_iterator с примером объявления и использования istreambuf_type.

istreambuf_iterator::traits_type

Тип, обеспечивающий тип признаков символа для istream_iterator.

typedef Traits traits_type;

Замечания

Этот тип является синонимом для параметра-шаблона Traits.

Пример

// istreambuf_iterator_traits_type.cpp
// compile with: /EHsc
#include <iterator>
#include <vector>
#include <iostream>
#include <algorithm>

int main( )
{
   using namespace std;

   typedef istreambuf_iterator<char>::char_type CHT1;
   typedef istreambuf_iterator<char>::traits_type CHTR1;

   cout << "(Try the example: 'So many dots to be done'\n"
        << " then an Enter key to insert into the output,\n"
        << " & use a ctrl-Z Enter key combination to exit): ";

   // istreambuf_iterator for input stream
   istreambuf_iterator< CHT1, CHTR1> charInBuf ( cin );
   ostreambuf_iterator<char> charOut ( cout );

   // Used in conjunction with replace_copy algorithm
   // to insert into output stream and replace spaces
   // with dot-separators
   replace_copy ( charInBuf , istreambuf_iterator<char>( ),
        charOut , ' ' , '.' );
}

См. также

Структура iterator
<iterator>
Потокобезопасность в стандартной библиотеке C++
Справочник по стандартной библиотеке C++