Open In App

Difference between Iterators and Pointers in C++ with Examples

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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++




// The output of this program can be different  
// in different runs. Note that the program 
// prints address of a variable and a variable
// can be assigned different address in different
// runs.
#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++




// C++ program to demonstrate iterators
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    // Declaring a vector
    vector<int> v = { 1, 2, 3 };
  
    // Declaring an iterator
    vector<int>::iterator i;
  
    int j;
  
    cout << "Without iterators = ";
  
    // Accessing the elements without using iterators
    for (j = 0; j < 3; ++j) {
        cout << v[j] << " ";
    }
  
    cout << "\nWith iterators = ";
  
    // Accessing the elements using iterators
    for (i = v.begin(); i != v.end(); ++i) {
        cout << *i << " ";
    }
  
    // Adding one more element to vector
    v.push_back(4);
  
    cout << "\nWithout iterators = ";
  
    // Accessing the elements without using iterators
    for (j = 0; j < 4; ++j) {
        cout << v[j] << " ";
    }
  
    cout << "\nWith iterators = ";
  
    // Accessing the elements using 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
Previous
Next
Share your thoughts in the comments
Similar Reads