C++ Forward Iterator

  • Forward Iterator is a combination of Bidirectional and Random Access iterator. Therefore, we can say that the forward iterator can be used to read and write to a container.
  • Forward iterators are used to read the contents from the beginning to the end of a container.
  • Forward iterator use only increments operator (++) to move through all the elements of a container. Therefore, we can say that the forward iterator can only move forward.
  • A Forward iterator is a multi-pass iterator.

Operations Performed on the Forward Iterator

Properties Valid Expressions
It is default constructible. A x;
It is a copy-constructible. A x(y);
It is a copy-assignable. y = x;
It can be compared either by using an equality or inequality operator. a==b;
a!=b;
It can be incremented. a++;
++a;
It can be dereferenced as an rvalue. *a;
It can also be dereferenced as an lvalue. *a = t;

Where 'A' is a forward iterator type, and x and y are the objects of a forward iterator type, and t is an object pointed by the iterator type object.

Example

Let's see a simple example

snippet
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>

using namespace std;

template<class ForwardIterator>                                       // function template
void display(ForwardIterator first, ForwardIterator last)            // display function
{
 while(first!=last)
 {
     cout<<*first<<" ";
     first++;
 }
}

int main()
{

  vector<int> a;                          // declaration of vector.
  for(int i=1;i<=10;i++)
  {
      a.push_back(i);
  }
  display(a.begin(),a.end());                // calling display() function.

  return 0;
}
Output
1 2 3 4 5 6 7 8 9 10

Features of the Forward Iterator

C++ Forward Iterator

Equality/Inequality operator

A forward iterator can be compared by using equality or an inequality operator.

Suppose 'A' and 'B' are the two iterators:

Example
snippet
A==B;           // equality operator
A!=B;            // inequality operator

Dereferencing

We can dereference the forward iterator as an rvalue as well as an lvalue. Therefore, we can access the output iterator and can also assign the value to the output iterator.

Suppose 'A' is an iterator and 't' is an integer variable

Example
snippet
*A = t;
  t = *A;

Incrementable

A forward iterator can be incremented but cannot be decremented.

Suppose 'A' is an iterator:

Example
snippet
A++;
++A;

Limitations of the Forward Iterator

Decrementable

A forward iterator cannot be decremented as it moves only in the forward direction.

Suppose 'A' is an iterator

Example
snippet
A--;          // invalid

Relational Operators

A forward iterator can be used with the equality operator, but no other relational operators can be applied on the forward iterator.

Suppose 'A' and 'B' are the two iterators

Example
snippet
A==B;        // valid
A>=B;        // invalid

Arithmetic Operators

An arithmetic operators cannot be used with the forward iterator.

Example
snippet
A+2;         // invalid
A+3;         // invalid

Random Access

A forward iterator does not provide the random access of an element. It can only iterate through the elements of a container.

Related Tutorial
Follow Us
https://www.facebook.com/Rookie-Nerd-638990322793530 https://twitter.com/RookieNerdTutor https://plus.google.com/b/117136517396468545840 #
Contents +