Difference between Iterators and Pointers in C++ with Examples
In C++ programming, we have both pointers and iterators that are used in managing and manipulating data structures. There are many similarities between iterators and pointers in their ability to reference and dereference memory, but there are certain differences between the two. Understanding the difference is very important in C++ programming.
Pointer
A pointer is a variable that contains the address of another variable, i.e., the 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.
Syntax
type* var_name;
Example
The below example demonstrates the use of pointers to store the address of a variable.
C++
#include <iostream>;
using namespace std;
int main()
{
int x=5;
int * myptr = &x;
cout << "Value of x is: " << x << endl;
cout << "address of x is: " << myptr << endl;
return 0;
}
|
Output
Value of x is: 5
address of x is: 0x7ffde9197ed4
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.
Syntax
type_container :: iterator var_name;
Example
The below example demonstrates the use of iterators.
C++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector< int > v = { 1, 2, 3 };
vector< int >::iterator i;
int j;
cout << "Without iterators = " ;
for (j = 0; j < 3; ++j) {
cout << v[j] << " " ;
}
cout << "\nWith iterators = " ;
for (i = v.begin(); i != v.end(); ++i) {
cout << *i << " " ;
}
v.push_back(4);
cout << "\nWithout iterators = " ;
for (j = 0; j < 4; ++j) {
cout << v[j] << " " ;
}
cout << "\nWith iterators = " ;
for (i = v.begin(); i != v.end(); ++i) {
cout << *i << " " ;
}
return 0;
}
|
Output
Without iterators = 1 2 3
With iterators = 1 2 3
Without iterators = 1 2 3 4
With iterators = 1 2 3 4
Difference 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:
Pointers |
Iterators |
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.) |
Last Updated :
09 Jan, 2024
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...