The C++ language makes wide use of iterators in its Standard Library, and describes several categories of iterators differing in the repertoire of operations they allow. These include "forward iterators", "bidirectional iterators", and "random access iterators", in order of increasing possibilities. All of the standard container template types provide iterators of one of these categories. Iterators generalize pointers to elements of an array (which indeed can be used as iterators), and their syntax is designed to resemble that of C pointer arithmetic, where the codice_15 and codice_16 operators are used to reference the element to which the iterator points, and pointer arithmetic operators like codice_17 are used modify iterators in traversal of a container.