ostream_iterator Class

The class template ostream_iterator describes an output iterator object that writes successive elements onto the output stream with the extraction operator <<.

Syntax

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

Parameters

Type
The type of object to be inserted into the output stream.

CharType
The type that represents the character type for the ostream_iterator. This argument is optional and the default value is char.

Traits
The type that represents the character type for the ostream_iterator. This argument is optional and the default value is char_traits< CharType>.

The ostream_iterator class must satisfy the requirements for an output iterator. Algorithms can be written directly to output streams using an ostream_iterator.

Constructors

Constructor Description
ostream_iterator Constructs an ostream_iterator that is initialized and delimited to write to the output stream.

Typedefs

Type name Description
char_type A type that provides for the character type of the ostream_iterator.
ostream_type A type that provides for the stream type of the ostream_iterator.
traits_type A type that provides for the character traits type of the ostream_iterator.

Operators

Operator Description
operator* Dereferencing operator used to implement the output iterator expression * i = x.
operator++ A nonfunctional increment operator that returns an ostream_iterator to the same object it addressed before the operation was called.
operator= Assignment operator used to implement the output iterator expression * i = x for writing to an output stream.

Requirements

Header: <iterator>

Namespace: std

ostream_iterator::char_type

A type that provides for the character type of the iterator.

typedef CharType char_type;

Remarks

The type is a synonym for the template parameter CharType.

Example

// 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 operator used to implement the output iterator expression * ii = x.

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

Return Value

A reference to the ostream_iterator.

Remarks

The requirements for an output iterator that the ostream_iterator must satisfy require only the expression * ii = t be valid and says nothing about the operator or the operator= on their own. The member operator in this implementation returns *this.

Example

// 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++

A nonfunctional increment operator that returns an ostream_iterator to the same object it addressed before the operation was called.

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

Return Value

A reference to the ostream_iterator.

Remarks

These member operators both return *this.

Example

// 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=

Assignment operator used to implement the output_iterator expression * i = x for writing to an output stream.

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

Parameters

val
The value of the object of type Type to be inserted into the output stream.

Return Value

The operator inserts val into the output stream associated with the object, followed by the delimiter specified in the ostream_iterator constructor (if any), and then returns a reference to the ostream_iterator.

Remarks

The requirements for an output iterator that the ostream_iterator must satisfy require only the expression * ii = t be valid and says nothing about the operator or the operator= on their own. This member operator returns *this.

Example

// 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

Constructs an ostream_iterator that is initialized and delimited to write to the output stream.

ostream_iterator(
    ostream_type& _Ostr);

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

Parameters

_Ostr
The output stream of type ostream_iterator::ostream_type to be iterated over.

_Delimiter
The delimiter that is inserted into the output stream between values.

Remarks

The first constructor initializes the output stream pointer with &_Ostr. The delimiter string pointer designates an empty string.

The second constructor initializes the output stream pointer with &_Ostr and the delimiter string pointer with _Delimiter.

Example

// 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

A type that provides for the stream type of the iterator.

typedef basic_ostream<CharType, Traits> ostream_type;

Remarks

The type is a synonym for basic_ostream< CharType, Traits>, a stream class of the iostream hierarchy that defines objects that can be used for writing.

Example

See ostream_iterator for an example of how to declare and use ostream_type.

ostream_iterator::traits_type

A type that provides for the character traits type of the iterator.

typedef Traits traits_type;

Remarks

The type is a synonym for the template parameter Traits.

Example

// 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
*/

See also

<iterator>
Thread Safety in the C++ Standard Library
C++ Standard Library Reference