Pointer: A pointer is a variable which contains the address of another variable, i.e., address of the memory location of the variable. Like any variable or constant, we must declare a pointer before using it to store any variable address.
Iterator: An iterator is any object that, pointing to some element in a range of elements (such as an array or a container), has the ability to iterate through the elements of that range.
type_container :: iterator var_name;
Without iterators = 1 2 3 With iterators = 1 2 3 Without iterators = 1 2 3 4 With iterators = 1 2 3 4
Differnece between Iterators and Pointers:
Iterators and pointers are similar in that we can dereference them to get a value. However, there are key differences as follows:
|A pointer hold an address in memory.||An iterator may hold a pointer, but it may be something much more complex. For example, an iterator can iterate over data that’s on file system, spread across many machines, or generated locally in a programmatic fashion.|
A good example is an iterator over linked list, the iterator will move through elements that are at nodes in the list whose addresses in RAM may be scattered.
|We can perform simple arithmetic on pointers like increment, decrement, add an integer etc.||Not all iterators allow these operations, e.g., we cannot decrement a forward-iterator, or add an integer to a nonrandom-access iterator.|
|A pointer of type T* can point to any type T object.||An iterator is more restricted, e.g., a vector::iterator can only refer to doubles that are inside a vector container.|
|We can delete a pointer using delete||Since an iterator refers to objects in a container, unlike pointers, there’s no concept of delete for an iterator. (The container is responsible for memory management.)|