Deitel & Associates, Inc. Logo

Back to
digg.png delicious.png blinkit.png furl.png
C++ How to Program, 5/e

© 2005
pages: 1500
Buy the Book!
Amazon logo
InformIT logo

[Note: This tutorial is an excerpt (Sections 23.1) of Chapter 23, Standard Template Library (STL), from our textbook C++ How to Program, 5/e. These tutorials may refer to other chapters or sections of the book that are not included here. Permission Information: Deitel, Harvey M. and Paul J., C++ HOW TO PROGRAM, ©2005, pp.1112-1123. Electronically reproduced by permission of Pearson Education, Inc., Upper Saddle River, New Jersey.]


23.1.2 Introduction to Iterators

Iterators have many features in common with pointers and are used to point to the elements of first-class containers (and for a few other purposes, as we will see). Iterators hold state information sensitive to the particular containers on which they operate; thus, iterators are implemented appropriately for each type of container. Certain iterator operations are uniform across containers. For example, the dereferencing operator (*) dereferences an iterator so that you can use the element to which it points. The ++ operation on an iterator moves it to the next element of the container (much as incrementing a pointer into an array aims the pointer at the next element of the array).

STL first-class containers provide member functions begin and end. Function begin returns an iterator pointing to the first element of the container. Function end returns an iterator pointing to the first element past the end of the container (an element that doesn’t exist). If iterator i points to a particular element, then ++i points to the “next” element and *i refers to the element pointed to by i. The iterator resulting from end can be used only in an equality or inequality comparison to determine whether the “moving iterator” (i in this case) has reached the end of the container.

We use an object of type iterator to refer to a container element that can be modified. We use an object of type const_iterator to refer to a container element that cannot be modified.

Using istream_iterator for Input and Using ostream_iterator for Output

We use iterators with sequences (also called ranges). These sequences can be in containers, or they can be input sequences or output sequences. The program of Fig. 23.5 demonstrates input from the standard input (a sequence of data for input into a program), using an istream_iterator, and output to the standard output (a sequence of data for output from a program), using an ostream_iterator. The program inputs two integers from the user at the keyboard and displays the sum of the integers.

 1  // Fig. 23.5: Fig23_05.cpp
 2  // Demonstrating input and output with iterators.
 3  #include <iostream>
 4  using std::cout;
 5  using std::cin;
 6  using std::endl;
 8  #include <iterator> // ostream_iterator and istream_iterator
10  int main()
11  {
12     cout << "Enter two integers: ";
14     // create istream_iterator for reading int values from cin
15     std::istream_iterator< int > inputInt( cin );
17     int number1 = *inputInt; // read int from standard input
18     ++inputInt; // move iterator to next input value
19     int number2 = *inputInt; // read int from standard input
21     // create ostream_iterator for writing int values to cout
22     std::ostream_iterator< int > outputInt( cout );
24     cout << "The sum is: ";
25     *outputInt = number1 + number2; // output result to cout
26     cout << endl;
27     return 0;
28  } // end main
 Enter two integers: 12 25
 The sum is: 37

Fig. 23.5 Input and output stream iterators.

Page 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12

Tutorial Index