Класс 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_iterator
s являются итераторами конца потока или если ни является конечным итератором потока; в противном случае false
.
Замечания
Диапазон определяется istreambuf_iterator
текущей позицией и итератором конца потока, но так как все неконечные итераторы потока эквивалентны функции-члена equal
, невозможно определить какие-либо подранги с помощью istreambuf_iterator
s. Операторы ==
и !=
имеют одинаковую семантику.
Пример
// 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++