Algorithms on input iterators should never attempt to pass through the same iterator twice. They should be single pass algorithms.
|
| |
|
|
|
|
| Assignment. |
|
|
| |
| Test for equality: Two iterators are equal if they refer to the same item. | ||
|
|
| |
| Test for inequality. The result is the same as !(it == it1). | ||
|
|
| Returns a reference to the value of the iterator. This operator can only be used in order to assign a value to this reference. |
|
|
|
Prefix increment operation.
Precondition: it is dereferenceable. |
|
|
|
Postfix increment operation. The result is the same as that of
iterator tmp = it; ++it; return tmp;.
Precondition: it is dereferenceable. |
{
ostream_iterator<double> it(cout);
for(int r = 0; r < 10; r++){
*it = 3.1415 * r * r;
++it;
}
}
The above code fragment is equivalent to:
{
for(int r = 0; r < 10; r++){
cout << 3.1415 * r * r;
}
}
The use of output iterators is better illustrated with a function that can write into arbitrary containers:
template < class OutputIterator >
void
generator(OutputIterator it)
{
for(int r = 0; r < 10; r++){
*it = 3.1415 * r * r;
++it;
}
}
and here comes its usage.
{
ostream_iterator<double> it(cout);
generator(it);
double R[10];
generator(R);
}
Note that the memory where the function generator writes to must be allocated. If you want to insert the generated doubles at the end of a list you have to use a back_insert_iterator. To explain this is out of the scope of this introduction to the STL. Please refer to the STL reference manuals.