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


Класс ostream_iterator

Шаблон класса ostream_iterator описывает объект итератора вывода, который записывает последовательные элементы в выходной поток с извлечением operator <<.

Синтаксис

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

Параметры

Тип
Тип объекта, который необходимо вставить в поток вывода.

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

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

Класс ostream_iterator должен удовлетворять требованиям для итератора вывода. Алгоритмы можно записывать непосредственно в потоки вывода с помощью ostream_iterator.

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

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

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

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

Операторы

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

Требования

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

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

ostream_iterator::char_type

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

typedef CharType char_type;

Замечания

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

Пример

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

int main( )
{
   using namespace std;

   typedef ostream_iterator<int>::char_type CHT1;
   typedef ostream_iterator<int>::traits_type CHTR1;

   // ostream_iterator for stream cout
   // with new line delimiter:
    ostream_iterator<int, CHT1, CHTR1> intOut ( cout , "\n" );

   // Standard iterator interface for writing
   // elements to the output stream:
   cout << "The integers written to the output stream\n"
        << "by intOut are:" << endl;
*intOut = 10;
*intOut = 20;
*intOut = 30;
}
/* Output:
The integers written to the output stream
by intOut are:
10
20
30
*/

ostream_iterator::operator*

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

ostream_iterator<Type, CharType, Traits>& operator*();

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

Ссылка на ostream_iterator.

Замечания

Требования к выходному итератору, которые ostream_iterator должны удовлетворять, требуют только выражение * ii = не допустимым и ничего не говорит о operator собственном или operator= собственном. Оператор-член в этой реализации возвращается *this.

Пример

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

int main( )
{
   using namespace std;

   // ostream_iterator for stream cout
   // with new line delimiter
   ostream_iterator<int> intOut ( cout , "\n" );

   // Standard iterator interface for writing
   // elements to the output stream
   cout << "Elements written to output stream:" << endl;
*intOut = 10;
   intOut++;      // No effect on iterator position
*intOut = 20;
*intOut = 30;
}
/* Output:
Elements written to output stream:
10
20
30
*/

ostream_iterator::operator++

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

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

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

Ссылка на ostream_iterator.

Замечания

Эти операторы-члены возвращаются *this.

Пример

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

int main( )
{
   using namespace std;

   // ostream_iterator for stream cout
   // with new line delimiter
   ostream_iterator<int> intOut ( cout , "\n" );

   // standard iterator interface for writing
   // elements to the output stream
   cout << "Elements written to output stream:" << endl;
*intOut = 10;
   intOut++;      // No effect on iterator position
*intOut = 20;
*intOut = 30;
}
/* Output:
Elements written to output stream:
10
20
30
*/

ostream_iterator::operator=

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

ostream_iterator<Type, CharType, Traits>& operator=(const Type& val);

Параметры

Val
Значение объекта типа Type, который нужно вставить в поток вывода.

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

Оператор вставляет val в выходной поток, связанный с объектом, за которым следует разделитель, указанный в конструкторе ostream_iterator (если таковые есть), а затем возвращает ссылку на объект ostream_iterator.

Замечания

Требования для итератора вывода, которым должен удовлетворять ostream_iterator, требуют только допустимости выражения * ii = t и сами по себе ничего не говорят об операторе или об операторе=. Этот оператор-член возвращает *this.

Пример

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

int main( )
{
   using namespace std;

   // ostream_iterator for stream cout
   // with new line delimiter
   ostream_iterator<int> intOut ( cout , "\n" );

   // Standard iterator interface for writing
   // elements to the output stream
   cout << "Elements written to output stream:" << endl;
*intOut = 10;
   intOut++;      // No effect on iterator position
*intOut = 20;
*intOut = 30;
}
/* Output:
Elements written to output stream:
10
20
30
*/

ostream_iterator::ostream_iterator

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

ostream_iterator(
    ostream_type& _Ostr);

ostream_iterator(
    ostream_type& _Ostr,
    const CharType* _Delimiter);

Параметры

_Ostr
Поток вывода типа ostream_iterator::ostream_type для итерации по нему.

_Разделитель
Разделитель, который вставляется в поток вывода между значениями.

Замечания

Первый конструктор инициализирует указатель потока вывода значением &_Ostr. Указатель на строку разделителя обозначает пустую строку.

Второй конструктор инициализирует указатель выходного потока с &_Ostr указателем строки разделителя с _Delimiter.

Пример

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

int main( )
{
   using namespace std;

   // ostream_iterator for stream cout
   ostream_iterator<int> intOut ( cout , "\n" );
*intOut = 10;
   intOut++;
*intOut = 20;
   intOut++;

   int i;
   vector<int> vec;
   for ( i = 1 ; i < 7 ; ++i )
   {
      vec.push_back (  i );
   }

   // Write elements to standard output stream
   cout << "Elements output without delimiter: ";
   copy ( vec.begin ( ), vec.end ( ),
          ostream_iterator<int> ( cout ) );
   cout << endl;

   // Write elements with delimiter " : " to output stream
   cout << "Elements output with delimiter: ";
   copy ( vec.begin ( ), vec.end ( ),
          ostream_iterator<int> ( cout, " : " ) );
   cout << endl;
}
/* Output:
10
20
Elements output without delimiter: 123456
Elements output with delimiter: 1 : 2 : 3 : 4 : 5 : 6 :
*/

ostream_iterator::ostream_type

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

typedef basic_ostream<CharType, Traits> ostream_type;

Замечания

Тип является синонимом basic_ostreamCharType<, класс потока иерархии iostream, Traits>который определяет объекты, которые можно использовать для записи.

Пример

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

ostream_iterator::traits_type

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

typedef Traits traits_type;

Замечания

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

Пример

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

int main( )
{
   using namespace std;

   // The following not OK, but are just the default values:
   typedef ostream_iterator<int>::char_type CHT1;
   typedef ostream_iterator<int>::traits_type CHTR1;

   // ostream_iterator for stream cout
   // with new line delimiter:
    ostream_iterator<int, CHT1, CHTR1> intOut ( cout , "\n" );

   // Standard iterator interface for writing
   // elements to the output stream:
   cout << "The integers written to output stream\n"
        << "by intOut are:" << endl;
*intOut = 1;
*intOut = 10;
*intOut = 100;
}
/* Output:
The integers written to output stream
by intOut are:
1
10
100
*/

См. также

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