Класс 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++