There are many types of iterator, each with its own purpose and functionality.
To understand better about iterators, I suggest you reading this: http://www.cplusplus.com/reference/std/iterator/
Iterators abstract away the container and provide a uniform way to access elements in any container. This is useful when doing generic programming with templates. It is also useful for maintenance reasons. When used properly, you can change out the container type for a data structure without changing a single line of executable code elsewhere in the program.
Following up jsmith's comment, read the docs for a couple of the std algorithms such as std::equal, std::count, or std::find. The great thing about these template functions is that they take iterators as the template args therefore the values passed to the function could be iterators from a vector container or pointers to elements of a C-Array. If you wrote a function that requires a pointer then you are limited in what you can pass to that function. However, the std template functions in the algorithm header are much more universal because they take iterators and not pointers. The only trick there is making sure that you understand the constraints of each algorithm as some require a specific kind of iterator or that the container accessed by the iterator be sorted already. If you spend some time reading the documentation and examples for a few of the std algorithms, the points will become much clearer. It may even help to write a few sample programs that utilize these functions so that you can truly appreciate them.