
Iterator
Stream iterators provide iterator capabilities for ostreams and istreams. They allow generic algorithms to be used directly on streams.
#include <iterator>
template <class T> class ostream_iterator : public output_iterator;
Stream iterators provide the standard iterator interface for input and output streams.
The class ostream_iterator writes elements to an output stream. If you use the constructor that has a second, char * argument, then that string will be written after every element . (The string must be null-terminated.) Since an ostream iterator is an output iterator, it is not possible to get an element out of the iterator. You can only assign to it.
template <class T>
class ostream_iterator : public output_iterator
{
public:
ostream_iterator(ostream&);
ostream_iterator (ostream&, const char*);
ostream_iterator (const ostream_iterator<T>&);
~ostream_itertor ();
ostream_iterator<T>& operator=(const T&);
ostream_iterator<T>& operator* () const;
ostream_iterator<T>& operator++ ();
ostream_iterator<T> operator++ (int);
};
ostream_iterator (ostream& s);
Construct an ostream_iterator on the given stream.
ostream_iterator (ostream& s, const char* delimiter);
Construct an ostream_iterator on the given stream. The null terminated string delimitor is written to the stream after every element.
ostream_iterator (const ostream_iterator<T>& x);
Copy constructor.
~ostream_iterator ();
Destructor
const T& operator= (const T& value);
Shift the value T onto the output stream.
const T& ostream_iterator<T>& operator* (); ostream_iterator<T>& operator++(); ostream_iterator<T> operator++ (int);
These operators all do nothing. They simply allow the iterator to be used in common constructs.
#include <iterator>
#include <numeric>
#include <deque>
#include <iostream.h>
int main ()
{
//
// Initialize a vector using an array.
//
int arr[4] = { 3,4,7,8 };
int total=0;
deque<int> d(arr+0, arr+4);
//
// stream the whole vector and a sum to cout
//
copy(d.begin(),d.end()-1,ostream_iterator<int>(cout," + "));
cout << *(d.end()-1) << " = " <<
accumulate(d.begin(),d.end(),total) << endl;
return 0;
}
If your compiler does not support default template parameters, then you need to always supply the Allocator template argument. For instance, you will need to write :
deque<int, allocator>
instead of :
deque<int>