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


Класс ostreambuf_iterator

Шаблон класса ostreambuf_iterator описывает объект выходного итератора, который записывает последовательные символьные элементы в выходной поток с оператором>> извлечения. ostreambuf_iterator отличаются от таковых класса ostream_iterator тем, что используют символы вместо универсального типа для типа объекта, вставляемого в поток вывода.

Синтаксис

template <class CharType = char class Traits = char_traits <CharType>>

Параметры

CharType
Тип, представляющий тип символа для ostreambuf_iterator. Этот аргумент является необязательным, и значением по умолчанию является char.

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

Замечания

Класс ostreambuf_iterator должен удовлетворять требованиям для итератора вывода. Алгоритмы можно записывать непосредственно в потоки вывода с помощью ostreambuf_iterator. Данный класс предоставляет итератор потока низкого уровня, обеспечивающий доступ к необработанному (неотформатированному) потоку ввода-вывода в форме символов, а также возможность обхода буферизации и преобразования символов, связанных с итераторами потоков высокого уровня.

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

Конструктор Description
ostreambuf_iterator Создает итератор ostreambuf_iterator, инициализированный для записи символов в поток вывода.

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

Введите имя Description
char_type Тип, обеспечивающий тип символа для ostreambuf_iterator.
ostream_type Тип, обеспечивающий тип потока для ostream_iterator.
streambuf_type Тип, обеспечивающий тип потока для ostreambuf_iterator.
traits_type Тип, обеспечивающий тип признаков символа для ostream_iterator.

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

Функция-член Description
failed Проверяет наличие ошибок вставки в буфер потока вывода.

Операторы

Operator Description
operator* Оператор разыменования, используемый для реализации выражения итератора вывода * i = x.
оператор++ Нефункциональный оператор инкремента, возвращающий ostreambuf_iterator, обращающийся к тому же объекту, к которому он обращался до вызова операции.
operator= Данный оператор вставляет символ в соответствующий буфер потока.

Требования

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

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

ostreambuf_iterator::char_type

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

typedef CharType char_type;

Замечания

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

Пример

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

int main( )
{
   using namespace std;

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

   // ostreambuf_iterator for stream cout
   // with new line delimiter:
    ostreambuf_iterator< CHT1, CHTR1> charOutBuf ( cout );

   // Standard iterator interface for writing
   // elements to the output streambuf:
   cout << "The characters written to the output stream\n"
        << " by charOutBuf are: ";
*charOutBuf = 'O';
   charOutBuf++;
*charOutBuf = 'U';
   charOutBuf++;
*charOutBuf = 'T';
   charOutBuf++;
   cout << "." << endl;
}
/* Output:
The characters written to the output stream
by charOutBuf are: OUT.
*/

ostreambuf_iterator::failed

Проверяет наличие ошибок вставки в буфер потока вывода.

bool failed() const throw();

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

true Значение , если вставка в буфер выходного потока не выполнена ранее; в противном случае false.

Замечания

Функция-член возвращаетсяtrue, если при предыдущем использовании элемента operator=вызов subf_-sputc> возвращает eof.

Пример

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

int main( )
{
   using namespace std;

   // ostreambuf_iterator for stream cout
   ostreambuf_iterator<char> charOut ( cout );

*charOut = 'a';
   charOut ++;
*charOut  = 'b';
   charOut ++;
*charOut = 'c';
   cout << " are characters output individually." << endl;

   bool b1 = charOut.failed ( );
   if (b1)
       cout << "At least one insertion failed." << endl;
   else
       cout << "No insertions failed." << endl;
}
/* Output:
abc are characters output individually.
No insertions failed.
*/

ostreambuf_iterator::operator*

Нефункциональный оператор dereferencing, используемый для реализации выражения выходного итератора * i = x.

ostreambuf_iterator<CharType, Traits>& operator*();

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

Объект-итератор ostreambuf.

Замечания

Этот оператор работает только в выражении выходного итератора * i = x для вывода символов в буфер потоковой передачи. Применяется к итератору ostreambuf, он возвращает итератор; *итер возвращает итер,

Пример

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

int main( )
{
   using namespace std;

   // ostreambuf_iterator for stream cout
   // with new line delimiter
   ostreambuf_iterator<char> charOutBuf ( cout );

   // Standard iterator interface for writing
   // elements to the output stream
   cout << "Elements written to output stream:" << endl;
*charOutBuf = 'O';
   charOutBuf++;   // no effect on iterator position
*charOutBuf = 'U';
*charOutBuf = 'T';
}
/* Output:
Elements written to output stream:
OUT
*/

ostreambuf_iterator::operator++

Нефункциональный оператор приращения, который возвращает итератор ostream, обращающийся к тому же символу, к которому он обращался до вызова операции.

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

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

Ссылка на символ, первоначально адресованный или определяемый реализацией объект, который преобразуется в ostreambuf_iterator<CharType, Traits.>

Замечания

Оператор используется для реализации выражения итератора выходных данных * i = x.

Пример

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

int main( )
{
   using namespace std;

   // ostreambuf_iterator for stream cout
   // with new line delimiter
   ostreambuf_iterator<char> charOutBuf ( cout );

   // Standard iterator interface for writing
   // elements to the output stream
   cout << "Elements written to output stream:" << endl;
*charOutBuf = 'O';
   charOutBuf++;      // No effect on iterator position
*charOutBuf = 'U';
*charOutBuf = 'T';
}
/* Output:
Elements written to output stream:
OUT
*/

ostreambuf_iterator::operator=

Данный оператор вставляет символ в соответствующий буфер потока.

ostreambuf_iterator<CharType, Traits>& operator=(CharType _Char);

Параметры

_Обугливать
Символ для вставки в буфер потока.

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

Ссылка на символ, вставленный в буфер потока.

Замечания

Оператор назначения, используемый для реализации выражения итератора выходных данных * i = x для записи в выходной поток.

Пример

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

int main( )
{
   using namespace std;

   // ostreambuf_iterator for stream cout
   // with new line delimiter
   ostreambuf_iterator<char> charOutBuf ( cout );

   // Standard iterator interface for writing
   // elements to the output stream
   cout << "Elements written to output stream:" << endl;
*charOutBuf = 'O';
   charOutBuf++;      // No effect on iterator position
*charOutBuf = 'U';
*charOutBuf = 'T';
}
/* Output:
Elements written to output stream:
OUT
*/

ostreambuf_iterator::ostreambuf_iterator

Создает итератор ostreambuf_iterator, инициализированный для записи символов в поток вывода.

ostreambuf_iterator(streambuf_type* strbuf) throw();
ostreambuf_iterator(ostream_type& Ostr) throw();

Параметры

strbuf
Выходной объект streambuf, используемый для инициализации указателя буфера потока вывода.

Ostr
Выходной объект stream, используемый для инициализации указателя буфера потока вывода.

Замечания

Первый конструктор инициализирует указатель выходного потока-буфера с помощью strbuf.

Второй конструктор инициализирует указатель буфера потока вывода значением Ostr. rdbuf. Сохраненный указатель не должен быть пустым указателем (NULL).

Пример

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

int main( )
{
   using namespace std;

   // ostreambuf_iterator for stream cout
   ostreambuf_iterator<char> charOut ( cout );

*charOut = 'O';
   charOut ++;
*charOut  = 'U';
   charOut ++;
*charOut = 'T';
   cout << " are characters output individually." << endl;

   ostreambuf_iterator<char> strOut ( cout );
   string str = "These characters are being written to the output stream.\n ";
   copy ( str.begin ( ), str. end ( ), strOut );
}
/* Output:
OUT are characters output individually.
These characters are being written to the output stream.
*/

ostreambuf_iterator::ostream_type

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

typedef basicOstream<CharType, Traits> ostream_type;

Замечания

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

Пример

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

ostreambuf_iterator::streambuf_type

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

typedef basic_streambuf<CharType, Traits> streambuf_type;

Замечания

Тип является синонимом basic_streambuf<CharType, Traits>, класса потока для буферов ввода-вывода, которые становятся streambuf при использовании типа символов.char

Пример

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

ostreambuf_iterator::traits_type

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

typedef Traits traits_type;

Замечания

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

Пример

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

int main( )
{
   using namespace std;

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

   // ostreambuf_iterator for stream cout
   // with new line delimiter:
    ostreambuf_iterator< CHT1, CHTR1> charOutBuf ( cout );

   // Standard iterator interface for writing
   // elements to the output streambuf:
   cout << "The characters written to the output stream\n"
        << " by charOutBuf are: ";
*charOutBuf = 'O';
   charOutBuf++;
*charOutBuf = 'U';
   charOutBuf++;
*charOutBuf = 'T';
   charOutBuf++;
   cout << "." << endl;
}
/* Output:
The characters written to the output stream
by charOutBuf are: OUT.
*/

См. также

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