Each container defines several types, shown in Table 9.2 (p. 330). We have already used three of these container-defined types: size_type
(§ 3.2.2, p. 88), iterator
, and const_iterator
(§ 3.4.1, p. 108).
In addition to the iterator types we’ve already used, most containers provide reverse iterators. Briefly, a reverse iterator is an iterator that goes backward through a container and inverts the meaning of the iterator operations. For example, saying ++
on a reverse iterator yields the previous element. We’ll have more to say about reverse iterators in § 10.4.3 (p. 407).
The remaining type aliases let us use the type of the elements stored in a container without knowing what that type is. If we need the element type, we refer to the container’s value_type
. If we need a reference to that type, we use reference
or const_reference
. These element-related type aliases are most useful in generic programs, which we’ll cover in Chapter 16.
To use one of these types, we must name the class of which they are a member:
// iter is the iterator type defined by list<string>
list<string>::iterator iter;
// count is the difference_type type defined by vector<int>
vector<int>::difference_type count;
These declarations use the scope operator (§ 1.2, p. 8) to say that we want the iterator
member of the list<string>
class and the difference_type
defined by vector<int>
, respectively.